最近复习c语言 刷到了一道题不是很理解
设字符型变量 x 的值是 064,表达式“~x^x<< 2&x”的值是: A
A.0333 B.333 C.0x333 D.020
其中的单目运算符~为按位取非
字符型变量064 为八进制的格式
即十进制的52 二进制为0011 0100
单纯取非时!(52)=0
求~x
因为计算机内部都是由补码进行运算
064的补码为 0011 0100
对它按位反的结果是 1100 1011
而1100 1011相当于 1011 0101 (-53)的补码
其实最后的结果为-53
求x<< 2&x
x<<2 为 1101 0000
相与后为 0001 0000 (16)
所以这道题
可以看成 (-53)^(16)(异或:相同0不同1)
即 1011 0101 与 0001 0000 异或
最后结果为1010 0101 (补码)
转化后为 1101 1011 (0333)
总结:
现在的计算机一般都是补码机:计算的结果都是补码形式 要记得转换
计算时把二进制转化成有符号的补码形式
字符型变量char是可以有符号的