我理解这两个补充是什么以及它有什么用处。我想知道的是,计算机如何确定该数字是否为其补码形式?
如何以及何时决定1111 1110是-2而不是254?它是在操作系统级别处理吗?
答案 0 :(得分:2)
据我所知,它是可靠的编程语言。
让我们说整数分配1个字节的内存(为了简单起见)。
如果它是UNSIGNED整数(只有正数),你可以使用0到255之间的任何数字(总共2 ^ 8个数字,包括零)。
<00> 00000000将为0,并且 11111111将是255十进制。但如果你的整数是SIGNED(你可以同时使用负数和正数),你可以使用-127到127之间的值,包括零(再次是2 ^ 8个数字)。
如果您的编译器碰到11111111 SIGNED int值,它将不会将其解释为255,因为signed int仅允许0到127的值为正数,因此它将其作为-1。下一个,-2将是11111110(十进制254),依此类推......
答案 1 :(得分:1)
计算机已经期望数据处于(或不处于)二进制补码形式(否则将无法确定它是否为-2或254)。是的,这可能会在操作系统级别决定。
在使用高级编程语言声明变量时,您可能会将此与设置变量类型时使用的相同想法联系起来;你很可能将类型设置为“十进制”,例如,或“整数”,然后编译器将期望值坚持这种类型。