【发布时间】:2022-01-22 16:19:04
【问题描述】:
我如何签署合同 ff12。这是一个负数,但我需要在这里删除所有 FF,但如果我这样做,它就会变成一个正数。
“符号收缩”的一个定义can be found in this The Art of Assembly 的在线副本,与 x86 cbw 之类的符号扩展相反。
符号收缩,将具有一些位数的值转换为具有较少位数的相同值,有点麻烦。标志扩展永远不会失败。给定一个 m 位有符号值,您始终可以使用符号扩展将其转换为 n 位数字(其中 n > m)。不幸的是,给定一个 n 位数,如果 m
【问题讨论】:
-
它不适合,因为
ff12是-238但 8 位范围是-128到+127。 -
不,不能。它超出了 8 位有符号的范围。
-
没有自然的方法可以使该数字 (-238) 适合 8 位;如果你强制它,它会被截断,这是溢出的另一种说法,并且在溢出时,预期的值会丢失,你得到的东西会变成其他值。该数字需要从第 2^8 位位置开始的至少一个符号位。我从来没有听说过符号收缩这个词,那是什么——你有参考吗?
-
你想要什么结果?饱和而不是截断,就像布伦丹的答案所示?我搜索了“符号收缩”,因为我从未听说过该术语,并且我发现的第一个命中(我在问题中编辑)将其描述为保值,与符号扩展相反。并清楚地解释了这并不总是可能的;有些数字不适合 8 位。如果您想了解截断的替代方法,edit 您的问题就是这么说。
-
正如书中指出的那样,“不幸的是,给定一个 n 位数,如果 m
标签: assembly type-conversion twos-complement truncation signed-integer