如何对具有前导零位的数值进行补充,使前导零位保持为零,并将其余的一和零位进行补码处理?我想仅使用按位操作来完成这个过程,而不是必须检查该值以确定该值中有多少前导零位。我可以使用哪些按位操作来隔离只包含一位或打开位的最低有效部分,并补足该值的仅该部分,使前导零位保持不变。
例如,给定一个数字9。
9将以32位无符号二进制形式表示为00...01001。
为了简单起见,仅考虑8位形式。 9 = 00001001
现在当我补足这个数字时,我会得到 11110110。
但这不是我想要的。
我希望原始表示法中的前导0保持不变,并补足其余部分。
即对于9 = 00001001, 前导的4个零应该保持为零,下一部分应该被补足。 因此我会得到00000110,即6。
我知道一种稍长的方法:
1.查找给定数字的位数,称为b 2.查找给定数字的补码,称为x 3.提取最后的b位
或者
3.从x中减去(0xFF << b)
例如,给定一个数字9。
9将以32位无符号二进制形式表示为00...01001。
为了简单起见,仅考虑8位形式。 9 = 00001001
现在当我补足这个数字时,我会得到 11110110。
但这不是我想要的。
我希望原始表示法中的前导0保持不变,并补足其余部分。
即对于9 = 00001001, 前导的4个零应该保持为零,下一部分应该被补足。 因此我会得到00000110,即6。
我知道一种稍长的方法:
1.查找给定数字的位数,称为b 2.查找给定数字的补码,称为x 3.提取最后的b位
或者
3.从x中减去(0xFF << b)