[理工] 如何判断二补数运算完后是正还是负?

楼主: g1990822 (什么东西?!)   2020-05-30 19:38:51
(代po)
最近在复习二进制减法的时候有一个地方卡了两三天
感觉这问题很简单但是我脑袋一时转不过来..
问题就是:要如何判断二进制用二补数算完后的结果到底是正数还是负数?
我记得之前上计概的时候,学校老师说(还抄在我的笔记上..):
(1)最高位元无进位表示结果为负,
若要转为十进则要用将值以取反2补数还原为负数
而若最高位元有进位时表示结果为正,该进位直接舍弃
例如:算十进制的11-21 => 11 + (-21) =>要把21取2补数再和11相加
11的二进制为:0000 1011
21的二补数为:1110 1011
则: 0000 1011
+) 1110 1011
作者: cossetannie (paa)   2020-05-31 00:29:00
看最高位有没有进位只是考虑有没有发生overflowoverflow那结果当然不会对上面好像讲错了 忽略掉吧 如果你只是单纯要看正负数直接看sign bit就可以了吧 应该跟进不进位没什么关系
作者: chengaryguan (garychen)   2020-05-31 00:45:00
若正加正变负,或附加负变正,才考虑overflow,但以你的举例,负加负仍为负,因此直接不用管overflow的那个bit,后面的11011000就是-40在2补数的值了。是的,电脑判断正负就靠最左边的bit为0或1,因跐当overflow等那个bit运算完与结果的最左边的bit相同(sign bit),表示没有发生overflow,结果就是正确的,以你的例子就是后面那个8个bits直接当结果。
作者: cossetannie (paa)   2020-05-31 10:17:00
进位应该是用来判断unsiged运算的结果正确与否
作者: wildwolf (可爱的哲哲)   2020-06-01 08:29:00
没有人发现 8-bit 表示正负数的时候,没有表示 -40 的方法吗?一开始就要多一bit signed extension 计算
作者: cossetannie (paa)   2020-06-01 11:09:00
11011000不是-40吗

Links booklink

Contact Us: admin [ a t ] ucptt.com