如何使用按位C运算找到0x87654321的补码?

时间:2016-09-27 23:32:49

标签: c hex bitmask

我正在学习C中的掩蔽技术。 这是我正在处理的一个练习题: 需要找到0x87654321的补码,同时保留最低有效字节,看起来应该像这样0x789ABC21

我现在唯一熟悉的面具是使用x& 0xFF去除除最后一个字节之外的所有字节。我不知道使用哪个按位运算符来获取十六进制数的补码。我该如何处理?

我的书没有解释十六进制数的一个补码是什么但是我用Google搜索并发现确定一个补码的快捷方法是采取15 - hexDigit =补偿如果我错了请纠正我。

1 个答案:

答案 0 :(得分:1)

C中的按位补码运算符是波形符~。这会以位模式翻转每一位。

按位XOR运算符(^)也可用于执行按位补码。按位XOR真值表如下:

^| 0 1
------
0| 0 1
1| 1 0

特别注意1 ^ 0 = 1且1 ^ 1 = 0.因此,带有1的按位异或也将具有翻转位的效果。

因此,带0xFFFFFF00的按位XOR将翻转除数字的最后8位之外的所有位。