目前只記得個大概了:乙個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 ...