題目:請寫出下面幾個表示式的結果,答案可以用10進製或16進製制書寫
1. 0xaa | 0x55
2. 15 & 240
3. 10 ^ 12
4. -2 >> 1
5. -2 >>> 1
解答:
1.分析:十六進製制數用0x……來表示,後面乙個十六進製制位是四位,兩個十六進製制位為乙個位元組,最多後面可以有8個十六進製制位,32個位元組,如:0xffffffff。
或(「 | 」)運算,全0為0,其他為1。
所以:0xaa 用二進位制表示為 10101010 ,0x55 用二進位制表示為 01010101 ,按位或之後為 11111111 ,十進位制數為255,十六進製制數為 0xff 。
2.分析:10進製轉換成2進製,用該數字除以2,記錄商和餘數,利用商再次除以2,記錄商和餘數……直到上為0或餘數為0停止,餘數逆序組成二進位制的從低到高位(最後的餘數為二進位制最低位)。與(「 & 」)運算,全1為1,其他為0 。
所以:15 等於1111 ,240等於 11110000,15前面用0補齊為00001111 ,按位與之後為 00000000 ,即結果為0
3.分析: 亦或(「 ^ 」)運算,相同取0,不同取1 。
所以:1010 ^ 1100 =0110 , 十進位制表示為6,十六進製制表示為 0x06 。
4.分析:帶符號右移(「 >> 」),即有符號位時,負數符號位補1,正數符號位補0, -2 的二進位制求法是正數取反加1,因此 2 的二進位制表示為0000 0000 0000 0000 0000 0000 0000 0010 ,取反加一為
1111 1111 1111 1111 1111 1111 1111 1110 ,即 -2 的二進位制表示。
注:>> , << , >>> , 運算子只針對int型和long型,byte ,short ,char型需要轉換成int型在進行操作。
所以: 帶符號右移之後為 1111 1111 1111 1111 1111 1111 1111 1111 ,除符號位之外,減一取反,得到帶符號十進 制數為 -1 。
5.分析:無符號右移 (「 >>> 」) ,即無論正負數,右移之後符號位均補 0 。
所以: -2 的二進位制無符號右移一位之後為 0111 1111 1111 1111 1111 1111 1111 1111,即 2^31 - 1,二的三十一次方減一。
注:右移和無符號右移主要區別就在於左面最高位補 0 還是補 1 的問題,無符號右移任何時候最高位都補 0 , 有符號右移則是正數補 0 ,負數補 1 。(沒有無符號左移!)
面試題 運算子限制
題目1 寫乙個函式,求兩個整數的之和,要求在函式體內不得使用 思路 模擬二進位制加法,先加不進製得a,然後算進製得b,然後 b 1 a即得到兩個數之和。a可以由兩個數的 得到,b可以有a b得到。int plus intnum1,intnum2 題目 求1 2 n,要求不能使用乘除法 for whi...
面試題1 賦值運算子函式
面試題1 為如下cmysting的宣告,新增賦值運算子函式。class cmystring 注意事項 1.是否把返回值型別宣告為該型別的引用,並在函式結束前返回例項自身的引用 即 this 2.是否把傳入的引數的型別宣告為常量引用。3.是否釋放例項自身的記憶體。4.是否判斷傳入的引數和當前的例項是不...
面試題1 賦值運算子函式
面試題1 為如下cmysting的宣告,新增賦值運算子函式。class cmystring 注意事項 1.是否把返回值型別宣告為該型別的引用,並在函式結束前返回例項自身的引用 即 this 2.是否把傳入的引數的型別宣告為常量引用。3.是否釋放例項自身的記憶體。4.是否判斷傳入的引數和當前的例項是不...