引入
設字符型變量 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,所以我懷疑這個題可能有問題
如果說的有什麼問題,請批評指正,謝謝!...