負數的或運算

2021-08-14 23:50:02 字數 520 閱讀 4817

場景:有乙個函式的返回值是乙個狀態量,我希望用這個狀態量的每一位來表示一種狀態的t/f。迫於強迫症,這個返回的值應該是負數的。

所以一開始我大概是這樣寫的

if(***)

if(yyy)

if(zzz)

但是這個結果一直是-1。原來以為負數的或運算和正數的或運算是一樣的,-1 | -2 = -3這樣的。後來想了下,因為在計算機裡存的是補碼,-1的補碼是:1111 1111,那再怎麼做或運算,它的結果也是-1。

其實要修改這個也很簡單,res在前面或正數(初始值為0),res在最後再乘-1。只是在這個過程中又認識到自己的zz了。

順便為什麼1000 0000 是-128的補碼,按取反+1的邏輯來算:(128其實已經越界了,最大表示值是+127)1000 0000 -> 0111 1111 + 1 -> 1000 0000。其實一共256個數,正數127個,零1個,那負數只能是128個,所以一定有-128,那-127是1000 0001,-128就是1000 0000嘍!

按位異或運算 (正數異或負數)

正數反碼 與原碼相同 負數反碼 符號位為 1 數值位按位 取反。正數補碼 與原碼相同 負數補碼 求反加一 記住 所有參與運算的都是以補碼形式進行的 結果也是補碼 因此也需要將補碼轉換成為原碼的形式存在 下面就以乙個例子進行講解 負二 異或 三等於多少?2 3 那麼怎麼轉換成位補碼呢?1.如果是負數的...

負數的位運算問題

原碼 反碼和補碼 乙個數可以分成符號位 0正1負 真值,原碼是我們正常想法寫出來的二進位制。由於計算機只能做加法,負數用單純的二進位制原碼書寫會出錯,於是大家發明了反碼 正數不變,負數符號位不變,真值部分取反 再後來由於 0,0的爭端,於是改進反碼,變成補碼 正數不變,負數符號位不變,真值部分取反,...

對位運算 負數字運算的理解

位運算 好 在這裡,我拿洛谷p2104的題當作例題 題目 小z最近學會了二進位制數,他覺得太小的二進位制數太沒意思,於是他想對乙個巨大二進位制數做以下 4 種基礎運算 運算 1 將整個二進位制數加 1 運算 2 將整個二進位制數減 1 運算 3 將整個二進位制數乘 2 運算 4 將整個二進位制數整除...