一道錯過的很基礎的筆試題

2021-07-15 22:56:17 字數 648 閱讀 4984

目前只記得個大概了:乙個16位的作業系統

unsigned char a = -4 & 3;

a = ?

當初自己寫的答案是3,但是真相卻不是這樣?第乙個自己考慮到了隱性強制型別轉換,第二個計算機是通過補碼的形式來表示資料的,不過當時還是算錯了!

原碼就是二進位制定點表示法,即最高位為符號位,「0」表示正,「1」表示負,其餘位表示數值的大小。

反碼表示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。

負數:負數的補碼則是符號位為「1」。並且,這個「1」既是符號位,也是數值位。數值部分按位取反後再在末位(最低位)加1。也就是「反碼+1」。

反碼表示             補碼表示

首先-4 轉換成二進位制:1000 0100       1111 1011           1111 1100

3轉換成二進位制:0000 0011        0000 0011           0000 0011

當然這裡這是作為8位的表示,如果作為系統預設的16位表示 高八位相與不用想也知道肯定全為0!原理看紅色字型部分!

所以輸出結果很肯定的就是 a = 0,當時居然做錯了,基礎知識確實好長時間沒有穩固了,雖然很簡單,也很基礎,但是時間長這些知識點不穩固也忘了。整理一遍,也算是溫故而知新!

一道筆試題,做的很垃圾

給定相同位數為n的兩個整形數a,b,其中b的每位數直接可以調整位置,我們要通過調整b中每位數的位置,找到乙個b 使得b 為大於a的最小組合數。如果找不到則返回 1,否則返回b 例如 輸入 n 3a 421 b 123 輸出 1 輸入 n 4 a 1234 b 1232 輸出 1322 思路 首先將輸...

一道筆試題

看到一道筆試題,跟自己想的有點出入,就跑了下,看了看原因。我稍微改了下 include int main int argc,char argv 輸出結果 c 5 d 245 press any key to continue vc6.0 debug下的彙編 5 unsigned char a 0xa...

一道筆試題

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