负数在二进制中如何表示
做而论道_CS:
计算机中,只有二进制数(1,0),既没有正负号,也没有小数点。
计算机只有加法器,字长,是固定的。
----------------
2 + 3 = 5,八位计算机的算法如下:
0000 0010
+ 0000 0011
---------
0 0000 0101
CPU 所用的法则,就是 “逢二进一” 。
那么,2 + 255 = ?
计算机,也是如法炮制:
0000 0010
+ 1111 1111 (即十进制 255)
---------
1 0000 0001
看到了吗? 进位,出现了 1 !
如果算上进位,就是九位数,即:257。
计算正确。
如果,你舍弃这个进位,只保留八位数:
【 结果就是:0000 0001 = 1。】
那么,这次计算,就是:
2 - 1 = 1。
并不是本来的:
2 + 255 = 257。
此处的 1111 1111 = 255,就【相当于-1】了。
同时,这次加法运算,就表现出:减法的功能。
1111 1111,这就是专家所编造的 “-1 的补码”。
而实际上,计算机,不知道什么补码不补码的。
它只知道这是二进制数 1111 1111。
CPU 只会按照 “逢二进一” 来计算。
CPU 也不知道,你后来又舍弃了进位!
舍弃了进位:
1111 1111 = 255,就能当做-1;
加法,就能当成减法运算。
舍弃进位、或不舍弃,这是你的事情!
与计算机、CPU,都毫无关系。
你 “天马行空” 的做法,可不要赖上计算机。
同样,所谓的 “浮点数”,也是一般的二进制数。
需要你后期处理,才能成为 “你想要的浮点数字”。
这些,都是算法的问题、编程的问题,与计算机无关。
如果讨论算法,这些二进制数的意义,可就无穷无尽了。
符号位原码反码取反加一符号位不变,更是一派胡言。
这些,跟计算机,更是一丁点关系都没有!
伪科学,说的就是这些事。
|