一道筆試題

2021-06-05 13:43:38 字數 1248 閱讀 3498

看到一道筆試題,跟自己想的有點出入,就跑了下,看了看原因。

**我稍微改了下:

#include int main(int argc, char* argv)

輸出結果:

c = 5    d = 245

press any key to continue

vc6.0 debug下的彙編**

5:        unsigned char a = 0xa5;

0040d738 mov byte ptr [ebp-4],0a5h

6: unsigned char b = ~a;

0040d73c mov eax,dword ptr [ebp-4]

0040d73f and eax,0ffh

0040d744 not eax

0040d746 mov byte ptr [ebp-8],al

7: unsigned char c = b >> 4;

0040d749 mov ecx,dword ptr [ebp-8]

0040d74c and ecx,0ffh

0040d752 sar ecx,4

0040d755 mov byte ptr [ebp-0ch],cl

8: unsigned char d = ~a >> 4;

0040d758 mov edx,dword ptr [ebp-4]

0040d75b and edx,0ffh

0040d761 not edx

0040d763 sar edx,4

0040d766 mov byte ptr [ebp-10h],dl

在執行 unsigned char d = ~a >> 4; 時先將 a 轉換成4位元組,運算完畢後在轉換為單位元組型別。

因為 >> (對應sar指令)是32位數算術右移指令,故先將a擴充至32位。

sar執行的操作:右移時,符號位(最高位)移到次高位的同時其值保持不變。也就是說,右移時空出的最高位用它自身原有的值填入,如果原來是0,則填入0;原來是1,填入1。

一道筆試題

上次去筆試的時候,有一道題,怎麼也沒做出來,當時也是很緊張,有些思路,但卻沒有做出來。有四個人要過乙個獨木橋,因為天比較黑,而且橋只能允許兩個人同時通過,並且他們只有乙個手電筒。四個人單獨同時橋的時間是1,2,5,8分鐘。問最短的時間是多少?當時我的答案 1和8,1回來,1 5,1回來,1 2 8 ...

一道筆試題

題目是這樣的 判斷乙個小於1000的正整數是否為素數。素數的定義就不說了,以下直接分析解法,畢竟是在寫與專業相關的東西,是給本專業的人看得,所以看的人應該有點基礎吧?求素數的問題是乙個數學上的難題,這是常識,但是本題目限制了最大範圍是在1000以內,所以就可以嘗試找出乙個足夠好的解了。首先給出乙個最...

一道MSSQL筆試題

一道mssql筆試題 有一組聯絡歷史,資料量較大。資訊表結構如下 id 主叫號碼 被叫號碼通話起始時間 通話結束時間 通話時長 其中id為主鍵 求其中同乙個號碼的兩次通話之間間隔大於某個時間的聯絡歷史id 不妨設時間間隔為2分鐘 一 select distinct id from tb t wher...