如果不希望设置符号位,可以在数据类型前面加 unsigned,如下所示:
unsigned short a = 12;
unsigned int b = 1002;
unsigned long c = 9892320;
这样,short、int、long 中就没有符号位了,所有的位都用来表示数值。也就意味着,使用了 unsigned 只能表示正数,不能表示负数了。
如果是unsigned int,那么可以省略 int ,只写 unsigned,例如:
unsigned n = 100;
它等价于:
unsigned int n = 100;
输出无符号数使用%u,代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a=1234;
unsigned a1=1234;
int b=0x7fffffff;
int c=0x80000000; // 0x80000000 = 0x7fffffff + 0x1
int d=0xffffffff;
unsigned e=0xffffffff;
printf("a=%d, a(u)=%u\n", a, a);
printf("a1=%d, a1(u)=%u\n", a1, a1);
printf("b=%d, b(u)=%u\n", b, b);
printf("c=%d, c(u)=%u\n", c, c);
printf("d=%d, d(u)=%u\n", d, d);
printf("e=%d, e(u)=%u\n", e, e);
system("pause");
return 0;
}
输出结果:
a=1234, a(u)=1234
a1=1234, a1(u)=1234
b=2147483647, b(u)=2147483647
c=-2147483648, c(u)=2147483648
d=-1, d(u)=4294967295
e=-1, e(u)=4294967295
可以发现,无论变量声明为有符号数还是无符号数,只有当以 %u 格式输出时,才会作为无符号数处理;如果声明为 unsigned,却以 d% 输出,那么也是有符号数。
d、e 的输出值之所以为 -1,与它们在内存中的存储形式有关
|