【发布时间】:2015-04-07 14:07:53
【问题描述】:
如何对具有前导零位的数值进行补码,以使前导零位保持为零,而剩余的一位和零位将被补足?我想仅使用按位运算来执行此操作,而不必检查该值以确定该值中有多少前导零位。我可以使用哪些按位运算来仅隔离包含一位或打开的位的值的最低有效部分,并仅对值的那部分进行补码,使前导零位保持不变。
例如,给定一个数字,比如 9。
9 将以无符号 32 位二进制形式表示为 00...01001。
为简单起见,仅考虑 8 位格式。 9 = 00001001
现在当我补充这个数字时,我会得到 11110110.
但这不是我想要的。
我希望原始表示的前导 0 保持原样并补充其余部分。
即对于 9 = 00001001, 前 4 个零应该保持为零,并且应该补充下一部分。 所以我会有 00000110 即 6。
我知道更长一点的方法:
- 找出给定数字是多少位
b - 查找给定数字的补码说
x - 提取最后一个
b位
或者
- 从
x中减去(0xFF<<b)
【问题讨论】:
-
是的,这两种方法都应该有效。
-
@OliverCharlesworth 他们确实有效,我正在寻找更好的方法!
标签: c bit-manipulation bit