設字符型變量 x 的值是 064,表達式....的值是

引入

設字符型變量 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,所以我懷疑這個題可能有問題

在這裏插入圖片描述

如果說的有什麼問題,請批評指正,謝謝!...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章