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。
以不同进制的形式输出时对应的格式控制符见下表。
