引入
设字符型变量 x 的值是 064,表达式“~x^x<< 2&x”的值是: A
A.0333 B.333 C.0x333 D.020
分析
我看到这个题,感觉考的很细,把不常用进制转换、运算符、优先级都考到了
进制转换
首先064代表的是8进制转换为十进制 4*8^0+6*8^1=52
~按位非运算符
~按位非运算符,我这里就不细分析了,讲一讲规律如果是
正数n,~n=-(n+1)
负数n,~-n=|-n+1|
比如~64=-65、~65=64
~运算符的优先级位2
<<是左移运算符
<<是左移运算符,规律是:左移运算符 高位溢出,低位补0
举个例子:8<<2
00000....1000
00000....100000
8<<2 = 32
优先级是5
&按位与运算符
&按位与运算符优先级是高于逻辑与运算符的,它有一个口诀,同为1为1,否则为0
举个例子8&10
...1000
...1010
...1000
8&10 = 8
&的优先级是8
^按位异或运算符、|按位或运算符
^按位异或运算符,口诀是同位相同为0,否则为1(注意不要理解为同为0为0了)
|按位或运算符你,口诀是有1个以上为1,就为1,否则为0
以8^10为例
...1000
...1010
...0010
8^10 = 2
^优先级为9级
|优先级为10级
解答
优先级 ~大于<<大于&大于^
第一步先算~x
x是正数,-(52+1) = -53
第二步x<< 2
52<<2,我们先要得到52的二进制,除k取余法
000.....110100 需要左移2位,高位溢出,低位补0
000...11010000 转为十进制1x2^4 + 1x2^6 +1x2^7=16+64+128=208
52<<2等于208
第三步208&x
000...11010000 208
000...00110100 52
000...00010000 16
208&52 = 16
第四步-53^16
这个地方有点坑数字在计算机中以补码的形式存在,正数的原码、反码、补码都一样,负数的补码等于原码取反+1
负数的原码是:负数正值的原码,然后在最高位的符号位变成1
-53原码:100...00110101
-53反码:111...11001010 取反时符号位不变
+1
-53补码:111...11001011
-53^16(相同位相同为0,否则为1)
111...1100 1011 -53
000...0001 0000 16
111...1101 1011
这个地方我有点不能理解111...1101 1011是-37的补码
因为选项中没有-37或者-37的八进制、十六进制这一选项
勉强对 111...1101 1011 进行运算:
1+2+8+16+64+128 219
转八进制后得到0333这个答案
坑点
因为上面求出来的二进制111…1101 1011 是-37的补码
同时我通过用电脑打印这个运算式~52^52<< 2&52 或者~064^064<< 2&x064 得到的答案都是-37,所以我怀疑这个题可能有问题
如果说的有什么问题,请批评指正,谢谢!...