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。

更新於:2021年3月24日

2K+ 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.