假设我想用8位代表128和2的补码,没有符号位
Wouldn't that be:
一个补充: 0111 1111
0111 1111
二补: 0111 1110
0111 1110
没有溢出
But the correct answer is:
二补: 0111 1111
溢出
Additional Question:
为什么一个_2552189的补充分别是 0000 0001 和 0000 0001 . 你怎么不像我们用128做的那样翻转位?
0000 0001
一个和两个补码都是表示有符号整数的方法 .
对于One的补充表示:
正数:以其常规二进制表示形式表示
例如:十进制值1将在8位One的补码中表示为0000 0001
负数:通过补充其大小的二进制表示来表示
例如:-127的十进制值将以8位One的补码表示为1000 0000,因为127的二进制表示为0111 1111,当补充为1000 0000时
对于Two的补充表示:
负数:通过补充其大小的二进制表示来表示,然后将该值加1
例如:-127的十进制值将在8位One的补码中表示为1000 0001,因为127的二进制表示是0111 1111,当补充时将是1000 0000然后添加0000 0001以获得1000 0001
因此,在两个实例中都有128个溢出,因为128的二进制表示是1000 0000,其中一个补码表示-127,而二进制补码表示-128 . 为了能够在两个和两个补码中表示128,你需要9位,它将表示为0 1000 0000 .
在8位无符号中,128是 1000 0000 . 在8位二_2552193中补码 .
1000 0000
0111 1110 是126 .
如comment中所述, 0111 1111 是127 .
见https://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html .
两个补码和一个补码都是表示负数的方法 . 正数只是二进制数;没有补充涉及 .
我使用一个补码算术(LINC)在一台计算机上工作 . 我非常喜欢两个补码,因为只有一个零表示 . 二进制补码的缺点是有一个值(-128,对于8位数字)是无法否定的 - 导致你要问的溢出 . 一个人的补充没有那个问题 .
2 回答
一个和两个补码都是表示有符号整数的方法 .
对于One的补充表示:
正数:以其常规二进制表示形式表示
例如:十进制值1将在8位One的补码中表示为0000 0001
负数:通过补充其大小的二进制表示来表示
例如:-127的十进制值将以8位One的补码表示为1000 0000,因为127的二进制表示为0111 1111,当补充为1000 0000时
对于Two的补充表示:
正数:以其常规二进制表示形式表示
例如:十进制值1将在8位One的补码中表示为0000 0001
负数:通过补充其大小的二进制表示来表示,然后将该值加1
例如:-127的十进制值将在8位One的补码中表示为1000 0001,因为127的二进制表示是0111 1111,当补充时将是1000 0000然后添加0000 0001以获得1000 0001
因此,在两个实例中都有128个溢出,因为128的二进制表示是1000 0000,其中一个补码表示-127,而二进制补码表示-128 . 为了能够在两个和两个补码中表示128,你需要9位,它将表示为0 1000 0000 .
在8位无符号中,128是
1000 0000
. 在8位二_2552193中补码 .0111 1110
是126 .如comment中所述,
0111 1111
是127 .见https://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html .
两个补码和一个补码都是表示负数的方法 . 正数只是二进制数;没有补充涉及 .
我使用一个补码算术(LINC)在一台计算机上工作 . 我非常喜欢两个补码,因为只有一个零表示 . 二进制补码的缺点是有一个值(-128,对于8位数字)是无法否定的 - 导致你要问的溢出 . 一个人的补充没有那个问题 .