我正在学习C中的掩蔽技术。 这是我正在处理的一个练习题: 需要找到0x87654321的补码,同时保留最低有效字节,看起来应该像这样0x789ABC21
我现在唯一熟悉的面具是使用x& 0xFF去除除最后一个字节之外的所有字节。我不知道使用哪个按位运算符来获取十六进制数的补码。我该如何处理?
我的书没有解释十六进制数的一个补码是什么但是我用Google搜索并发现确定一个补码的快捷方法是采取15 - hexDigit =补偿如果我错了请纠正我。
答案 0 :(得分:1)
C中的按位补码运算符是波形符~
。这会以位模式翻转每一位。
按位XOR运算符(^
)也可用于执行按位补码。按位XOR真值表如下:
^| 0 1
------
0| 0 1
1| 1 0
特别注意1 ^ 0 = 1且1 ^ 1 = 0.因此,带有1的按位异或也将具有翻转位的效果。
因此,带0xFFFFFF00
的按位XOR将翻转除数字的最后8位之外的所有位。