目次  
前言
在 C 語言中,處理整數型資料時有「有符號(signed)」與「無符號(unsigned)」兩種。特別是unsigned 型,被視為不會有負值的整數型,在特定用途上非常有用。然而,如果在未了解其特性的情況下使用,可能會引發意想不到的錯誤。  本文將詳細說明 C 語言中 unsigned 的使用方式與注意事項。透過具體的程式碼範例,了解 unsigned 的優點與風險,並能適當地加以運用。unsigned 是什麼?基本的理解
unsigned 是什麼?
C語言中,對整數型別(int 或 char 等)指定 unsigned,即可將其作為無符號(不含負值)整數型別來使用。  例如,普通的 int 型別(有符號)可以處理以下範圍的值。int 型(32 位元環境下)
-2,147,483,648 〜 2,147,483,647另一方面,unsigned int 型因不含負數,而能處理更廣範圍的正值。unsigned int 型(32 位元環境下)
0 〜 4,294,967,295也就是,使用 unsigned 後,能夠儲存更大的值。unsigned 的基本宣告方式
使用unsigned 時,請在資料型別前加上 unsigned 進行宣告,如下所示。#include <stdio.h>
int main() {
    unsigned int num = 3000000000;
    printf("%un", num);  // 3000000000
    return 0;
}這樣一來,使用 unsigned 就能處理比普通 int 更大的值。unsigned 的資料型與表示範圍
unsigned 的種類與範圍
C語言中,unsigned 可套用於多種資料型別。每種型別的大小與範圍如下表所示。| 資料型別 | 大小(位元組) | 範圍 | 
|---|---|---|
unsigned char | 1 | 0 ~ 255 | 
unsigned short | 2 | 0 ~ 65,535 | 
unsigned int | 4 | 0 ~ 4,294,967,295 | 
unsigned long | 4 或 8 | 視環境而定 | 
unsigned long long | 8 | 0 ~ 18,446,744,073,709,551,615 | 
sizeof() 來確認。#include <stdio.h>
int main() {
    printf("Size of unsigned int: %zu bytesn", sizeof(unsigned int));
    return 0;
}unsigned 的使用範例
實際上,利用unsigned 來確認數值的最大值吧。#include <stdio.h>
#include <limits.h>
int main() {
    printf("Max unsigned int: %un", UINT_MAX);
    return 0;
}執行此程式碼後,會輸出依環境而定的 unsigned int 最大值。unsigned 的基本用法
unsigned 的宣告與賦值
unsigned 使用時,請按以下方式宣告變數。#include <stdio.h>
int main() {
    unsigned int num1 = 100;
    unsigned int num2 = 200;
    printf("num1: %un", num1);
    printf("num2: %un", num2);
    return 0;
}在此程式中,unsigned int 型的變數 num1 與 num2,分別賦予 100 與 200 的值。使用 unsigned 時的注意事項
signed 與 unsigned 混用導致的錯誤
比較有符號整數 (int) 與 unsigned int 時,可能會產生意外的結果。#include <stdio.h>
int main() {
    int a = -5;  // 有符號
    unsigned int b = 10;  // 無符號
    if (a < b) {
        printf("a 小於 b\n");
    } else {
        printf("a 大於 b\n");
    }
    return 0;
}在此程式碼中,a 為 -5,本應小於 b=10,但 a 會被轉換成 unsigned int,導致意外的比較結果。
使用 unsigned 的情況與應避免的情況
應使用 unsigned 的情況
✔ 不需要考慮負值的情況(例:二進位資料處理) ✔ 想要最佳化記憶體效率的情況(例:嵌入式系統) ✔ 大量使用位元運算的情況(例:旗標管理)應避免使用 unsigned 的情況
✘ 與有號變數混用的情況(會發生非預期的型別轉換) ✘ 可能會處理負值的情況(會產生非預期的錯誤) ✘ 作為迴圈變數使用的情況(有溢位風險)常見的誤解與其對策(FAQ)
使用 unsigned 會讓計算變快嗎?
誤解 「使用unsigned,會比 signed 的運算更快」的想法有時會出現。 正解 在現代的 CPU 中,unsigned 與 signed 的運算速度幾乎沒有差異。 對策 ✔ unsigned 是否使用,應該根據 資料的意義而非計算速度 來判斷。總結
到此為止,我們介紹了有關unsigned 的 常見誤解與其對策。本文要點
unsigned並不會提升計算速度。- 與 
signed之間的轉換需特別留意(尤其是溢位時的行為)。 - 在迴圈變數使用 
unsigned時,可能會產生無限迴圈的錯誤。 unsigned char適合用於二進位資料的處理。- 將負值賦予 
unsigned時,會產生非預期的行為。 
unsigned。
 
