二进制表示计算机信息
原因
由于计算机的硬件像CPU, 内存都是由IC(Integrated Circuit, 集成电路)组成.IC的所有引脚只有0v或者5v状态, 所以这个特性决定了计算机的信息数据只能由二进制表示
二进制数
基数为2的进制数,用0和1表示的数,逢二进一
二进制转十进制: 将二进制的各个位数与它的位权相乘即可
如: 00100111, => 2^0*1 + 2^1*1 + 2^2*1 +2^3*0 +2^4*0 +2^5*1+2^6*0+2^7*0=39
十进制转二进制: 将十进制数不断除以2, 将余数放入二进制数的低位
39转二进制:
39/2 => 19 余 1
19/2 => 9 余 1
9/2 => 4 余 1
4/2 => 2 余 0
2/2 => 1 余 0
1/2 => 0 余 1
所以39的二进制数为100111,补齐8位为00100111
在计算机中,** 字节是处理信息的基本单位**, 内存和磁盘都是用字节来存储和读写数据的. 位是信息处理的最小单位.
**
用字节单位处理数据时, 如果数字小于存储数据的字节数, 那么高位就用0来补齐.
例如,100111 这个 6 位二进制 数,用 8 位(= 1 字节)表示时为 00100111,用 16 位(= 2 字节)表示 时为 0000000000100111。
补数
补数,就是计算机用正数来表示负数
二进制表示负数时, 一般会把最高位作为符号来使用, 所以我们可以把最高位成为符号位.
符号位一般用0表示正数, 1表示负数
计算机内部做减法运算时, 实际上是用加法来实现减法运算的, 所以表示负数时, 就需要二进制补数了.
二进制补数就是将二进制的各位数值取反后+1.
如十进制1的负数为-1, 所以要求它的二进制数
移位
就是将二进制数整体向左移或向右移
所以原来的数将扩大2,4,..倍或者缩小为1/2, 1/4...
移位分为左移位<<, 右移位>>(算数移位), 无符号移位>>>(逻辑移位).
右移位与无符号移位的区别:
- 右移位: 在做有符号的数值运算, 最高位做右移时, 最高位的数值不变, 1就是1,0就是0
- 无符号移位: 右移时最高位用0填充
比如: -4表示11111100,右移两位,
11111100>>11111111,最右边的00溢出,最左边用1填充,最后结果为-111111100>>>00111111, 最右边的00溢出,最左边用0填充,最后结果为63
符号扩充
指在保持不变的情况下,将其转换成16位和32位的的二进制数
比如11111111,进行符号扩充时 => 正确结果是11111111 11111111, 而不是00000000 11111111, 所以不管是正数还是用补数表示的负数, 都只需要用符号位填充高位即可.
逻辑运算
逻辑运算一共分为 与, 或, 非, 异或, 四种运算
- 逻辑与: 两个数都为1时,运算结果为1, 其余情况都为0
- 逻辑或: 两个数有一个为0时, 运算结果为1, 其余情况为0
- 逻辑非: 0变1, 1变0
- 异或运算: 排斥相同值的运算,两数不同时为1, 其余情况为0
参考: