首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言有號與無號整型的區別與範例

     編輯:C 語言問答

位元寬度相同,解讀方式不同

以 16 位元 short 為例:

類型符號位數值位範圍負數表示
short (有號)1 bit15 bits-32,768 ~ 32,767二補數
unsigned short016 bits0 ~ 65,535無負數

關鍵差異

  • 最高位解讀:有號視為符號位,無號視為數值位。
  • 溢位行為:無號溢位定義為模 2^N 環繞;有號溢位屬未定義行為。
  • 格式化輸出:%d 對應有號,%u 對應無號。

程式驗證

#include <stdio.h>

int main()
{
    short        s = 0x8000; // -32768
    unsigned short us = 0xFFFF; // 65535

    printf("Signed:   %d  (0x%04X)\n", s, s);
    printf("Unsigned: %u  (0x%04X)\n", us, us);
    return 0;
}
輸出:
Signed:   -32768  (0x8000)
Unsigned: 65535   (0xFFFF)

最佳實踐

  • 需表示負值或進行算術比較時用有號。
  • 位元操作、記憶體位址、純正數量(如大小、計數)優先用無號(size_t, uint32_t)。
  • 避免有號/無號混合運算導致隱含轉換錯誤(啟用 -Wsign-compare)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved