无符号的整数类型

概念与适用场景

在现实中,有些数据总是非负的(如河滩上的鹅卵石数目、人口数量、计数等)。对于每个存储带符号整数的类型,C语言都提供了一个对应的类型来存储无符号整数。它们占用的内存空间与带符号类型完全相同,只是在带符号类型前加上了关键字 unsigned。

无符号类型及字节数

类型名称(可缩写)字节数
unsigned char1
unsigned short int 或 unsigned short2
unsigned int4
unsigned long int 或 unsigned long4
unsigned long long int 或 unsigned long long8

数值范围与表示原理

如果位数给定,可表示的数值总数就是固定的。例如 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)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注