C语言的unsigned int到底是什么意思

为了搞清unsigned int到底是什么,我做了下面一个程序,把不同的数字打进去,看输出的不同效果:

#include "stdio.h"
main()
{
unsigned short a=32768;
unsigned short b=32767;
unsigned short c=32769;
unsigned short d=-32768;
unsigned short e=-32767;
unsigned short f=-32769;
unsigned short g=-1;
unsigned short h=-2;
unsigned short i=-3;
printf("%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n",a,b,c,d,e,f,g,h,i);
getch();
}

运行的结果如下:
32768
32767
32769
32768
32769
32767
65535
65534
65533

Press any key to continue

还是没有看出规律来,请会的朋友解释一下好吗?谢谢!

不管是unsigned还是signed,同类型宽度都是一样,short占2字节共16个位,无符号可以完全利用这16个位来表示数字,就有2^16=65536中可能,可以表示0~65535,而有符号类型要用到最高位表示符号,2^15 = 32768,所以能表示-32768~32767,为了不出现两个0的情况,+0和-0,底层实现一般是用2的补码来表示负数,一个负数的二进制表示,可以由这个负数的绝对值的二进制表现形式取反再加1得到,

比如16位short值-1,绝对值是1,二进制表示为:
0000 0000 0000 0001
取反
1111 1111 1111 1110 + 1 =
1111 1111 1111 1111
而正好这个数也是无符号型最大值65535的表现形式,所以对于这个二进制,是解释为65535还是-1,那就是printf里格式化的功能了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-04-05

C语言中unsigned  int是无符号整数的意思。

无符号整型(unsigned  int):

(1)我们都知道整型是4个字节(有些编译器不同,可能会是2个),即32位,无符号整型当然也为32位。

(2)既然是32位,无符号整型的取值是32个0~32个1,即:0~4294967295

(3)我们举个例子:32位有点长,所以我们拿16位的unsigned short int 来举例。
short int 是16位的,无符号的范围是0~65535,就拿十进制的32767(以下的所有举例均拿这个数字来说事了)来说,它的二进制为:

0111 1111 1111 1111

对于无符号的整型32767来说,它的二进制的最高位称为数据位,即那个0就是数据位,数据位是要参与运算的,如果我们把0改成1,即16个1,它的十进制就是65535(就是2的15次方+2的14次方...一直加到2的0次方),这是不同于有符号整型的。

本回答被网友采纳
第2个回答  2013-10-27
unsigned 表示无符号
第3个回答  2013-10-27
无符号整型,注意它的数值表示范围即可。
第4个回答  2013-10-27
无符号整型
相似回答