Arduino 中有符號整數和無符號整數的區別
定義整數時,預設情況下是有符號的。換句話說,它可以接受正值和負值。無符號整數顧名思義,只接受正值。因此,它們的範圍更大。
如果使用一個使用兩個位元組(16 位)來表示整數的開發板,那麼無符號整數的最大範圍是 0 到 65535 (216-1)。
然而,在表示有符號整數時,範圍將是 -32767 到 +32767。注意 32767 對應於 (215 -1)。正如你所看到的,最高有效位似乎沒有作用。最高有效位實際上用於確定符號(正數為 0,負數為 1),其餘 15 位使用二進位制補碼錶示數字的值。 你可以在這裡閱讀更多相關資訊:https://en.wikipedia.org/wiki/Two%27s_complement。
同樣,如果使用的開發板使用 4 個位元組(32 位)來表示整數,則無符號整數的範圍將是從 0 到 4,294,967,295 (232 - 1),而有符號整數的範圍將是從 – 2147483647 到 +2147483647。注意 2147483647 對應於 (231 - 1)。
如果嘗試從較小的數字中減去較大的數字,並嘗試將結果賦值給無符號整數,則會導致整數溢位(因為無符號整數無法處理負數)。請參見下面的程式碼:
示例
void setup() {
Serial.begin(9600);
Serial.println();
int x = 10;
int y = 20;
int z = x-y;
unsigned int w = x-y;
Serial.println(z);
Serial.println(w);
}
void loop() {
// put your main code here, to run repeatedly:
}序列埠監視器輸出為:
輸出

正如你所看到的,整數z能夠儲存負值。但是無符號整數w無法做到這一點,它反而列印了 (232 – 10) 而不是 -10。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP