二、数据是用二进制

153 阅读3分钟

二进制表示计算机信息

原因


由于计算机的硬件像CPU, 内存都是由IC(Integrated Circuit, 集成电路)组成.IC的所有引脚只有0v或者5v状态, 所以这个特性决定了计算机的信息数据只能由二进制表示

image.png

二进制数

基数为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 => 191
19/2 => 91
9/2  => 41
4/2  => 20
2/2  => 10
1/2  => 01

所以39的二进制数为100111,补齐8位为00100111

在计算机中,** 字节是处理信息的基本单位**, 内存和磁盘都是用字节来存储和读写数据的. 位是信息处理的最小单位.
**
用字节单位处理数据时, 如果数字小于存储数据的字节数, 那么高位就用0来补齐.
例如,100111 这个 6 位二进制 数,用 8 位(= 1 字节)表示时为 00100111,用 16 位(= 2 字节)表示 时为 0000000000100111

补数

补数,就是计算机用正数来表示负数


二进制表示负数时, 一般会把最高位作为符号来使用, 所以我们可以把最高位成为符号位.
符号位一般用0表示正数, 1表示负数

计算机内部做减法运算时, 实际上是用加法来实现减法运算的, 所以表示负数时, 就需要二进制补数了.

二进制补数就是将二进制的各位数值取反后+1.

如十进制1的负数为-1, 所以要求它的二进制数

  • 将1转换成8位二进制数, 00000001
  • 将其取反, 11111110
  • 取反后结果+1, 11111111

移位

就是将二进制数整体向左移或向右移


所以原来的数将扩大2,4,..倍或者缩小为1/2, 1/4...

移位分为左移位<<, 右移位>>(算数移位), 无符号移位>>>(逻辑移位).

右移位与无符号移位的区别:

  • 右移位: 在做有符号的数值运算, 最高位做右移时, 最高位的数值不变, 1就是1,0就是0
  • 无符号移位: 右移时最高位用0填充


比如: -4表示11111100,右移两位,

  • 11111100 >> 11111111,最右边的00溢出,最左边用1填充,最后结果为-1
  • 11111100 >>> 00111111, 最右边的00溢出,最左边用0填充,最后结果为63

符号扩充

指在保持不变的情况下,将其转换成16位和32位的的二进制数


比如11111111,进行符号扩充时 => 正确结果是11111111 11111111, 而不是00000000 11111111, 所以不管是正数还是用补数表示的负数, 都只需要用符号位填充高位即可.

逻辑运算


逻辑运算一共分为 与, 或, 非, 异或, 四种运算

  • 逻辑与: 两个数都为1时,运算结果为1, 其余情况都为0
  • 逻辑或: 两个数有一个为0时, 运算结果为1, 其余情况为0
  • 逻辑非: 0变1, 1变0
  • 异或运算: 排斥相同值的运算,两数不同时为1, 其余情况为0


image.png

参考: