数据宽度与上一个笔记的进制有很大关系。计算机不能无视大小存储一个数据,他需要一个容器来存放这些二进制数据 容器都是有大小的,超出这个容器计算机会舍弃这个二进制数的高位,进制篇说过,二进制数运算原理是转换成补码然后参与运算,同理。 假设一个容器有四位,这里只是假设,计算机最基本单位是byte 8位
二进制 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 十六进制 0 1 2 3 4 5 6 7 8 9 A B C D E F 无符号数 顺序存储 0 1 2 3 4 5 6 7 8 9 A B C D E F 有符号 0-7 F到-8
在四位寄存器计算机中计算无符号F+1 =1111 + 1 = 10000 超出容器大小 舍去溢出位最后等于0 如果看见有符号数 F = -1 算式可以表示(-1)+1= 1111 + 0001 = 10000 还是会等于0
至于这块容器到底存有符号还是无符号数,是我们定义的。计算机最终只认识0、1,它不管哪个正负。所以现在如下图所示,从圆的右下方开始存数据,存无符号数。依次存0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。如果再比F大的数则会变成0!此时一共可以存16种数
由于只能存4位二进制数,现在我们又有存负数的需求,怎么办呢?公平起见,分两半,约定好一半存正数,一半存负数,所以此时0到7是正数,8到F是负数。因为数字只能用4位来存储,又要表示负数又要表示正数,所以干脆分一半。如果换成二进制就会发现,0到7最高位全是0;8到F最高位全是1。而且此时F为最大的负数,怎么推断的的呢?因为如果比F再大1的数就变成了0:1111+1=10000,只能存4位,多出来的位,计算机会丢弃,则计算机会当做0000,即0。所以F是最大的负数-1。那么对应的E就是-2,D就是-3。(这里可以用补码去理解)
32位数据宽度容器存储无符号数范围是从0到FFFFFFFF 存储有符号数从0到7FFFFFFF表示正数,从80000000到FFFFFFFF表示负数
byte 1个字节 8位 word 两个字节 16位 Dwod 四个字节 32位