计算机中符号位正负,负数在计算机中的表示+有符号无符号的区别+负数按位运算...
部分轉載自:https://blog.csdn.net/kebi007/article/details/89741960
一.負數的二進制位表示法
原碼:一個整數按照絕對值的大小轉換成的二進制數,稱為原碼
一個short 16位的整數9的原碼是:
0000?? ?0000?? ?0000?? ?1001
1
反碼:一個二進制數按位取反,所得的二進制數成為原二進制數的反碼
取9的二進制數的反碼,可以使用位邏輯非運算 ~
取反后的16位二進制
1111?? ?1111?? ?1111?? ?0110
1
補碼:反碼加1稱為補碼,簡而言之,要得到一個屬的補碼,先得到這個數的反碼,然后再將反碼加上1,所得數稱為補碼
那么9的補碼也就是
1111?? ?1111?? ?1111?? ?0110
1
加上1的結果,如下:
1111?? ?1111?? ?1111?? ?0111
1
即-9的16位二進制表示是
1111?? ?1111?? ?1111?? ?0111
1
如圖:
二.c#Int有符號的和無符號的區別
話不多說,直接明確三點結論:
1.實際開發中,都用的是有符號的Int(應該默認強制要求),只有整型有有無符號的特征,Double、Decimal,是沒有這種特征的。
2.無符號數中,所有的位都用于直接表示該值的大小。
3.有符號數中,最高位用于表示正負。
這里還是簡單地啰嗦幾句關于有符號和無符號的區別,UInt32和Int32的區別
這里說的Int指的是32位有符號的類型
Int32的值范圍是 -2147483648 至2147483647,也就是
-2的31次方到2的31次方-1
符號位表示的意義就在于此,最前面的位表示正負。
-2148483648的32位二進制是:
1000?? ?0000?? ?0000?? ?0000?? ?0000?? ?0000?? ?0000?? ?0000
1
2147483647的32位二進制是:
0111?? ?1111?? ?1111?? ?1111?? ?1111?? ?1111?? ?1111?? ?1111
1
那么c#中UInt32的最大值是什么呢?
UInt32的范圍是0到2的32次方4294967295,最大值32位二進制是
1111?? ?1111?? ?1111?? ?1111?? ?1111?? ?1111?? ?1111?? ?1111
1
所以得出結論無符號只能表示正數,有符號可以表示正負數。
三.按位運算
負數按位運算時,是按計算機存儲的格式進行按位運算的,即以補碼的形式,可以認為:
所有的按位操作符的操作數都會被轉成補碼形式的有符號整數
總結
以上是生活随笔為你收集整理的计算机中符号位正负,负数在计算机中的表示+有符号无符号的区别+负数按位运算...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 少年中国说——梁启超〔近现代〕
- 下一篇: dropout 关于keep_prob