← 返回首页
C语言系列教程(五)
发表时间:2021-03-19 01:02:04
unsigned

C语言规定,在符号位中,用 0 表示正数,用 1 表示负数。short、int 和 long 类型默认都是带符号位的,符号位以外的内存才是数值位。

在某些情况下我们确定某个数字只能是正数,比如商品价格、考试分数、内存地址等等,这个时候符号位就是多余的了,就不如删掉符号位,把所有的位都用来存储数值,这样能表示的数值范围更大(大一倍)。C语言允许我们这样做,如果不希望设置符号位,可以在数据类型前面加上 unsigned 关键字,例如:

unsigned short a = 12;
unsigned int b = 1002;
unsigned long c = 9892320;

我们以整型(int) 为例。 windows 64位系统在int类型占用4个字节,因为默认是有符号的,所以能表示的最大正整数是:2147483647。

#include <stdio.h>

int main(){
    int n = 2147483647;
    printf("n=%d",n);
    getch();
    return 0;
}

如果想让n赋值给更大正整数,则会编译失败。

#include <stdio.h>

int main(){
    int n = 4294967295;
    printf("n=%d",n);
    getch();
    return 0;
}

我们可以使用unsigned让int表示最大的数值大一倍。

#include <stdio.h>

int main(){
    unsigned int n = 4294967295UL;
    printf("n=%u",n);
    getch();
    return 0;
}

输出结果: n=4294967295

其中,%u表示以十进制形式输出无符号数。UL是unsigned long缩写,表示把int型的数据转换为unsigned long。

以不同进制的形式输出时对应的格式控制符见下表。