轉載自https://blog.csdn.net/o_ohello/article/details/86663613
可知在計算機中數是以補碼的形式儲存的。
比如7,為111。-7為11111001。
其中求解-7的補碼形式我們是怎么求解的呢?
負數原碼轉換為補碼的方法之一:
符號位保持1不變,數值位按位求反,末位加1。
負數原碼轉換為補碼的方法之二:
符號位保持1不變,在數值位中從低位向高位找1,第一個1及其右邊的0保持不變,數值位的其余部分求反。
這兩種方法大家試一試就會發現其實是一樣的。
第一種方法是按照定義來設計的求解方式。
解釋:一個正數的補碼為原碼自己,設為a,其負數形式的補碼設為b,
可知a+b=0。方法一的求解方式就是先把這個數二進制中為0的哪些位給加上來,再加1,使得其進位,溢出為0.
如6=0000 0110,-6 = 1111 1001 + 1 = 1111 1010
可見最低位的1右邊的0,在取反之后就會全部變為1,再加一,進位后,取反獲取的1全部進位了,最低位的1又被進位上來了,即最低位的1保持不變。
方法二就是利用了這個性質,簡化了求解過程中加1進位這一步.
於是我們可以利用補碼正數和負數的這一點來快速求解一個數的最低位的1在哪里。
即n&-n
這樣最低位的1被與運算保留下來,其他位全部置零。
