二、二进制

二进制
数据--->存放在内存当中 全部都是二进制形式
数据是如何在内存只存放的

1010 四位数字 一位二进制数字称为一个bit
内存基本单位是字节 (Byte) 1Byte=8bit

整数在内存中的存放方式 对二进制的操作都是基于整数二进制的

char 存放ASCII 1个字节 8bit 8位二进制存放这个char
int 4个字节 4*8=32位二进制存放一个int

正数的二进制 97 不断除2求余 余数从下往上写 1100001

97 余数
-----------
48 1
24 0
12 0
6 0
3 0
1 1
0 1

char ch=97; --->0110 0001

ip地址是通过unsigned char来存储的 范围0~255;

负整数 存放方式
最高位为符号位 1 负数
-97
1110 0001 (绝对值二进制01100001 最高位改成1表示负数) 原码
1001 1110 (除去原码的最高位 其余全部0变1 1变0) 反码
1001 1111 (反码+1) 补码 (取反加1)

1001 1111
0110 0001
-------------
10000 0000 //用补码计算 计算正确

补码的意义 保证计算的时候 结果不会出错

存负整数

小数在内存中存放方式(了解)
float 4个字节 32位 1位存符号位 8位存指数位 23位存尾数位
double 8个字节 64位 1位符号位 11位指数位 52位尾数位

0.147852

整数部分和小数部分
整数部分 0 ---->二进制 0
小数部分

0.147852 乘2 取整数部分
--------
0.295704 0
0.591408 0
1.182816 1
0.365632 0
0.731464 1
1.462528 1
........可以继续乘....

0.001011(1*2^-3+1*2^-5+1*2^6) 二进制形式的小数

把小数点移动到第一个1的邮编 变成指数形式
1.001 小数点右移三位 左移(正数)

移动之后 小数点右边的数字称为尾数
存-3 指数
对于float 指数 直接加127 然后在算二进制就行

124 0111 1100
0 0111 1100 001 0000 0000 0000 0000 0000

对二进制的操作都是基于整数二进制的

八进制 满八进一 0~7
十六进制 满十六进一 0~9 A~F(可以小写) 表示16进制数字



x=20;//10进制20
x=0130;//前面家还是那个一个0位八进制
x=0xa12f;//前面加0x表示16进制整数

进制转换

10进制和8进制以及10进制和16进制相互转换

10--->8进制 %o
1234--->4*8^0+3*8^1+3*8^1+2*8^2+1*8^3

10--->16进制 %x
1234--->4*16^0+3*16^1+3*16^1+2*16^2+1*16^3

8--->10进制
1234---->除八求余

8--->16进制
1234---->除十六求余

2--->16进制
0011 1100--->3A

2--->8进制
00 111 010--->072

32位 就能表示 2^32个数字
分一半给负数 -2^31~-1
另一半给整数 0~2^31-1

猜你喜欢

转载自www.cnblogs.com/liugangjiayou/p/11727094.html