Binary 计算机如何识别一个给定的数字在它的两个';什么是正式形式?

Binary 计算机如何识别一个给定的数字在它的两个';什么是正式形式?,binary,computer-science,computer-architecture,twos-complement,Binary,Computer Science,Computer Architecture,Twos Complement,我知道这两个词的补语是什么,它有什么用处。我想知道的是,计算机是如何决定这个数字是以2的补码形式出现的 它如何以及何时决定1111110是-2而不是254?它是在操作系统级处理吗?计算机已经期望数据是(或不是)2的补码形式(否则就无法判断它是-2还是254)。是的,这可能是在操作系统级别决定的 您可能会将此与在高级编程语言中声明变量时设置变量类型时使用的相同想法联系起来;例如,您很可能会将该类型设置为“decimal”或“integer”,然后编译器将期望值保持此类型。计算机已经期望数据是(或不

我知道这两个词的补语是什么,它有什么用处。我想知道的是,计算机是如何决定这个数字是以2的补码形式出现的


它如何以及何时决定1111110是-2而不是254?它是在操作系统级处理吗?

计算机已经期望数据是(或不是)2的补码形式(否则就无法判断它是-2还是254)。是的,这可能是在操作系统级别决定的


您可能会将此与在高级编程语言中声明变量时设置变量类型时使用的相同想法联系起来;例如,您很可能会将该类型设置为“decimal”或“integer”,然后编译器将期望值保持此类型。

计算机已经期望数据是(或不是)2的补码形式(否则无法判断它是-2还是254)。是的,这可能是在操作系统级别决定的


您可能会将此与在高级编程语言中声明变量时设置变量类型时使用的相同想法联系起来;例如,您很可能会将该类型设置为“decimal”或“integer”,然后编译器会期望值保持此类型。

就我认为编程语言的可靠性而言

让我们假设integer分配1字节的内存(使其更简单)

如果是无符号整数(仅限正数),则可以使用0到255之间的任何数字(总共2^8个数字,包括零)

00000000将是0,并且 11111将是255位小数

但是如果你的整数是有符号的(你可以同时使用负数和正数),你可以使用-127到127之间的值,包括零(同样是2^8个数字)


如果编译器遇到11111111带符号的int值,它将不会将其解释为255,因为带符号的int只允许0到127之间的值用于正数,因此它将把它作为-1。下一个,-2将是11111110(254位小数),依此类推……

,因为我认为它在编程语言上是可靠的

让我们假设integer分配1字节的内存(使其更简单)

如果是无符号整数(仅限正数),则可以使用0到255之间的任何数字(总共2^8个数字,包括零)

00000000将是0,并且 11111将是255位小数

但是如果你的整数是有符号的(你可以同时使用负数和正数),你可以使用-127到127之间的值,包括零(同样是2^8个数字)


如果编译器遇到11111111带符号的int值,它将不会将其解释为255,因为带符号的int只允许0到127之间的值用于正数,因此它将把它作为-1。下一个-2将是11111110(254位小数),依此类推……

如果符号很重要,通常会有多条CPU指令来处理这两种情况(例如,x86上的
MUL
vs
IMUL
JA
vs
JG
)。对于某些操作(如加法),如果要将这些位视为-2或254,则与此无关;无论哪种情况,结果都是一样的。如果符号很重要,通常会有多条CPU指令来处理这两种情况(例如x86上的
MUL
vs
IMUL
JA
vs
JG
)。对于某些操作(如加法),如果要将这些位视为-2或254,则与此无关;无论哪种方式,结果都是一样的,因此CPU不关心它是否有符号;它将对接收到的位计算请求的操作(操作系统发送的某些指令),操作系统将解释返回的位。我说的对吗?我不明白操作系统与此有什么关系。在CPU级别,当您希望将操作数视为有符号与无符号时,您有不同的指令(或同一指令的不同变体)——对于那些有符号性的操作(对于更多的操作,则没有符号性)。如果您使用的是比汇编语言更高级的语言编程,则通常会得到有符号和无符号的数据类型,编译器会根据这些数据类型选择适当的指令;它将对接收到的位计算请求的操作(操作系统发送的某些指令),操作系统将解释返回的位。我说的对吗?我不明白操作系统与此有什么关系。在CPU级别,当您希望将操作数视为有符号与无符号时,您有不同的指令(或同一指令的不同变体)——对于那些有符号性的操作(对于更多的操作,则没有符号性)。如果您使用的是比汇编语言更高级的语言编程,则通常会得到有符号和无符号的数据类型,编译器将根据这些数据类型选择适当的指令。