计算机如何识别给定数字的二进制补码形式?
How does the computer recognise that a a given number is in its Two's comeplent form?
我了解什么是补码及其用途。我想知道的是计算机是如何判断这个数是补码形式的?
它如何以及何时决定 1111 1110 是 -2 而不是 254?是否处于 OS 处理级别?
计算机已经期望数据是(或不是)二进制补码形式(否则将无法判断它是 - 2 还是 254)。是的,这可能会在 OS-level 上决定。
您可能会将此与在 high-level 编程语言中声明变量时设置变量类型时使用的相同想法联系起来;例如,您很可能会将类型设置为 "decimal" 或 "integer",然后编译器会期望值坚持这种类型。
就我认为它依赖于编程语言而言。
假设整数分配 1 个字节的内存(为简单起见)。
如果它是无符号整数(只有正数),你可以使用 0 到 255 之间的任何数字(总共 2^8 个数字,包括零)。
00000000 将为 0,并且
11111111 将是十进制的 255。
但是如果你的整数是有符号的(你可以同时使用负数和正数)你可以使用从 -127 到 127 的值,包括零(同样是 2^8 个数字)。
如果您的编译器遇到 11111111 SIGNED int 值,它不会将其解释为 255,因为 signed int 只允许 0 到 127 之间的值作为正数,因此它会将其视为 -1。下一个,-2 将是 11111110(十进制 254)等等...
我了解什么是补码及其用途。我想知道的是计算机是如何判断这个数是补码形式的?
它如何以及何时决定 1111 1110 是 -2 而不是 254?是否处于 OS 处理级别?
计算机已经期望数据是(或不是)二进制补码形式(否则将无法判断它是 - 2 还是 254)。是的,这可能会在 OS-level 上决定。
您可能会将此与在 high-level 编程语言中声明变量时设置变量类型时使用的相同想法联系起来;例如,您很可能会将类型设置为 "decimal" 或 "integer",然后编译器会期望值坚持这种类型。
就我认为它依赖于编程语言而言。
假设整数分配 1 个字节的内存(为简单起见)。
如果它是无符号整数(只有正数),你可以使用 0 到 255 之间的任何数字(总共 2^8 个数字,包括零)。
00000000 将为 0,并且 11111111 将是十进制的 255。
但是如果你的整数是有符号的(你可以同时使用负数和正数)你可以使用从 -127 到 127 的值,包括零(同样是 2^8 个数字)。
如果您的编译器遇到 11111111 SIGNED int 值,它不会将其解释为 255,因为 signed int 只允许 0 到 127 之间的值作为正数,因此它会将其视为 -1。下一个,-2 将是 11111110(十进制 254)等等...