5.下列 C/C++程式片段執行後,z 的值為何? (假設 int 跟 unsigned int 皆為 32 位元)
(A) 3
(B)23
(C) 35
(D) 25

答案:登入後查看
統計: A(19), B(76), C(80), D(36), E(0) #2978897

詳解 (共 4 筆)

#5584171
向左位移6位向右位移26位,可拆分為向左...
(共 185 字,隱藏中)
前往觀看
10
0
#5663672

我來補充一下B1說的:
0x123456782的2進制是

hex      1       2       3       4       5       6       7      8
bin    0001 0010 0011 0100 0101 0110 0111 1000

然後你再左移6位,再向他說的右移6位補0
0001 0010 0011 0100 0101 0110 0111 1000   
->10 0011 0100 0101 0110 0111 1000 000000(左移6位)
->0000 0010 0011 0100 0101 0110 0111 1000(右移6位)
之後右移20位
0000 0010 0011 0100 0101 0110 0111 1000(框起來的部分是要移走的)
->0000 0000 0000 0000 0000 0000 0010 0011

就是16進制的23,10進制就是35

9
0
#6094257
十六進位的12345678化成二進位如下:
0001 0010 0011 0100 0101 0110 0111 1000
ㅤㅤ
<<(31-25)如下:
1000 1101 0001 0101 1001 1110 0000 0000
ㅤㅤ
>>(31-25+20)如下:
0000 0000 0000 0000 0000 0000 0010 0011
ㅤㅤ
二進位化成十進位:
1+2+32=35
2
0
#5989675

根據圖片中的C/C++代碼片段,bits 用於從一個整數中提取特定範圍內的位。這個宏將整數 i 中從位 a 到位 b 的位提取出來,並將它們放到最低位的位置。這裡,UINT32 定義為 unsigned int,意味著操作是在無符號32位整數上執行的。

bits(i,a,b) 內部的運作原理如下:

  1. (i << (31-b)):首先將 i 向左移動 (31-b) 位,這會將從位 b 開始的位移動到整數的最高位。

  2. >> (31-b+a):然後將上一步的結果向右移動 (31-b+a) 位,這會將從位 b 開始的位移動到整數的最低位,同時丟棄除了 b-a+1 位之外的所有位。

在這個特定的例子中,我們有 i = 0x12345678 和宏調用 bits(i,20,25)。這意味著我們想要提取 0x12345678 從第20位到第25位的位。

我們可以通過執行以下步驟來計算 z 的值:

  1. 確定 i 中的第20位到第25位。
  2. 將這些位移動到最低位的位置。
  3. 將其他位清零。    執行給定的C/C++代碼片段後,z 的值為 35。
0
0