概念与适用场景
在现实中,有些数据总是非负的(如河滩上的鹅卵石数目、人口数量、计数等)。对于每个存储带符号整数的类型,C语言都提供了一个对应的类型来存储无符号整数。它们占用的内存空间与带符号类型完全相同,只是在带符号类型前加上了关键字 unsigned。
无符号类型及字节数
| 类型名称(可缩写) | 字节数 |
|---|---|
unsigned char | 1 |
unsigned short int 或 unsigned short | 2 |
unsigned int | 4 |
unsigned long int 或 unsigned long | 4 |
unsigned long long int 或 unsigned long long | 8 |
数值范围与表示原理
如果位数给定,可表示的数值总数就是固定的。例如 32 位(4 个字节)可以表示 4,294,967,296 个不同的值。
- 带符号类型需要分出一半空间给负数(如 4 字节范围约为
-21亿 ~ +21亿)。 - 无符号类型只表示正数和零,因此正数表示范围比带符号类型大一倍(如 4 字节范围为
0 ~ 4,294,967,295)。
类比说明:
假设用 4 位二进制存储:
- 带符号:范围
-8 到 +7(包含负数和正数) - 无符号:范围
0 到 15(全是正数,正数部分容量翻倍)
变量声明与代码示例
声明无符号整型变量的实例:
unsigned int count;
unsigned long population;
注意:long 和 int 虽然在此环境下占用相同的内存量(均为 4 字节),但它们在编译器中仍然是不同的类型。
完整代码示例:
#include <stdio.h>
int main(void)
{
unsigned char c = 2;
unsigned short s = 3;
unsigned int i = 5;
unsigned long l = 2222222L;
unsigned long long ll = 3234324LL;
return 0;
}Code language: PHP (php)