二进制正负数转换和移位的规则详解
1、轉換規則
二進制整數都是以補碼的形式出現的
正數的原碼、反碼、補碼都相同
負數的反碼就是正數的原碼先把最高位變為1然后其余的位取反
負數的補碼就是該負數的反碼加1。
2、二進制的移位規則
<<和>>
二進制數,在向右移1位近似表示除以2,但是十進制的奇數轉化為二進制數后,在向右移時,最右邊的1將被直接抹去,說明向右移對于奇數并非完全近似于除以2。
左移 <<,和右移>> 兩種運算中,符號位均參與移動,除了負數右移,高位補1之外,其他情況均在空位處補0。
在左移運算中,由于符號位均參與向左移動,如上圖,最左位可能是1或者是0,正數向左移動的結果可能是正,也可能是負;負數向左移動的結果同樣可能是正,也可能是負。
>>>>無符號右移
注意不存在<<<無符號向左移動的運算方式!
對于三個大于號的>>>無符號向右移動時,正負數高位均補0,造成的結果就是:
正數不斷向右移動的最小值是0
負數不斷向右移動的最小值是1
無符號意即藐視符號位,符號位失去特權必須像其他平常的數字位一起向右移動,高位直接補0,根本不關心是正數還是負數。此運算常用在高位轉低位的場景中。
為何負數不斷地無符號向右移動的最小值是1呢?在實際編程中,位移運算僅作
用于整型(32位)和長整型(64位)數上,假如在整型數上移動的位數是32位,無論是否帶符號位以及移動方向,均為本身。因為移動的位數是一個mod32的結果,
即35>>1與35>>33是一樣的結果。如果是長整型,mod64,即35<<1與35<<65的結果是一樣的。負數在無符號往右移動63位時,除最右邊為1 外,左邊均為0,達到最小值1,如果>>>64,則為其原數值本身。
總結
以上是生活随笔為你收集整理的二进制正负数转换和移位的规则详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广和通5G模组FG160FM160荣获2
- 下一篇: 稀疏表示(5)之帕德博恩轴承数据集测试非