整數型別
C++中提供的整數型別有三種:int、long、short,每種型別又分為有符號和無符號兩種型別。有符號整數既可以表示非負整數,又可以表示負整數;但是,無符號整數不能表示負數,只能表示非負整數。
(一)無符號整數
在記憶體中,int整數通常佔4位元組,這裡,我們假定int為32位,那麼無符號整數表示的取值範圍為0x00000000~0xFFFFFFFF,轉換為十進位制為0~4294967295。當無符號整數表示的整數小於32位的時候,不足的空間,在最高位補0。比如數字5對應的二進位制位101,那麼剩餘的29位在最高位補0,填充後的結果為:00000000000000000000000000000101。在計算中,無符號整數表示的正整數範圍是有符號整數的2倍。
(二)有符號整數
在有符號整數中,資料的最高位代表符號位,1為負號,0為正號,在計算中,有符號整數是以補碼的形式來存放的。以int整數為例,當資料的位數不足32位的時候,先將該數轉換為補碼,然後擴充套件該數的符號位至第31位。比如,5的補碼是0101,那麼只需要將最高位的0向左不斷擴充套件直至第31位,最終結果為:00000000000000000000000000000101;-5的補碼為1011,那麼
只需要將最高位的1向左擴充套件至第31位,最終結果為:11111111111111111111111111111011。
在32位整數中,有符號整數表示的非負整數範圍為:0x00000000~0x7FFFFFFF;負數的表示區間為:0x80000000~0xFFFFFFFF。
在我們討論的C/C++中,有符號整數都是以補碼形式存放的,而且在幾乎所有的程式語言中都是如此,因為計算機只會做加法,不會做減法,所以需要將減法轉換為加法。
如設有符號數x,y,那麼x-y的值會被轉換為x(補)+(-y)(補);例如,(3-2)可轉換成(3+(-2)),運算過程為:3的十六進位制補碼0x00000003加上(-2)的補碼0xFFFFFFFE,從而得到0x100000001。由於儲存範圍為4位元組大小,兩數相加後產生了進位,超出了儲存範圍,超出的1將被捨棄。進位被捨棄後,結果為0x00000001。
相關文章
- 整數型別(轉)型別
- Mysql 資料型別之整數型別MySQL 資料型別
- 4-2/3整數型別型別
- mysql整數資料型別深入解析MySql資料型別
- 高效能Mysql(第3版)_資料型別的選擇_整數型別MySql資料型別
- 二分法(整數型別)的基本框架型別框架
- double型別中可精確表達的最大正整數型別
- 06 Windows批處理之整數和浮點資料型別Windows資料型別
- excel 整數匯入資料庫轉成varchar型別後多了小數點Excel資料庫型別
- C#變數型別(1):引用型別和值型別 (轉)變數型別
- PHP變數型別PHP變數型別
- TypeScript 數值型別TypeScript型別
- Java 變數型別Java變數型別
- 變數型別-Set變數型別
- 解析型別引數型別
- 【MySQL資料型別1之--數值型別】MySql資料型別
- std::packaged_task<返回型別(引數型別)>Package型別
- js基本語法之 值型別(資料型別)(變數型別)JS資料型別變數
- MySQL 中 整數型別的儲存和範圍計算過程詳解MySql型別
- CTFHub SQL 整數型注入【最快四步】SQL
- Python 序列型別以及函式引數型別Python型別函式
- JavaScript - 變數、值、型別JavaScript變數型別
- Python數值型別Python型別
- 資料型別,變數資料型別變數
- 變數型別轉換變數型別
- 【Scala之旅】型別引數型別
- Python變數型別Python變數型別
- 字串型別數字order by字串型別
- mybatis sql String>Double, 型別引數被強轉為數值型別MyBatisSQL型別
- 型別的本質:對變數、型別、指標的理解型別變數指標
- javascript型別系統——Number數字型別JavaScript型別
- Mysql資料庫學習(二):資料型別(數值型別 日期和時間型別 字串型別)MySql資料庫資料型別字串
- MYSQL 資料型別儲存-數值型MySQL 資料型別
- 判斷javaScript變數是Ojbect型別還是Array型別JavaScript變數型別
- 強型別語言變數和資料型別的理解變數資料型別
- Dart型別變數-表示資訊Dart型別變數
- Java™ 教程(有界型別引數)Java型別
- mybatis引數型別錯誤MyBatis型別