我知道他两表示的数的范围不一样,还有最高位int是当符号位理解,unsigned 不是。看下面例子。
int a=65535;
printf("%d,%u",a,a);
结果是-1,65535
把int 换成unsigned int 结果还是一样。
虽说int是有符号整数,65535已超出了它表示的范围,可65535一样存储在a中了啊,是1111 1111 1111 1111.最后输出的时候,不同的格式结果也不一样。所以我觉得int和 unsigned区别没什么用,关键还是看最后输出格式。
一、指代不同
2、unsigned int:需声明无符号类型的话就需要在类型前加上unsigned。
二、内存占用不同
1、int:int占用4字节,32比特,数据范围为-2147483648~2147483647[-2^31~2^31-1]。
2、unsigned int:unsigned能存储的数据范围则是0~65535。由于在计算机中,整数是以补码形式存放的。根据最高位的不同,如果是1,有符号数的话就是负数;如果是无符号数,则都解释为正数。
三、特点不同
1、int: Int 返回小于或等于 number 的第一个负整数。例如,Int 将 -8.4 转换成 -9。
2、unsigned int:无符号类型能保存2倍于有符号类型的正整数数据。
参考资料来源:百度百科-unsigned int
参考资料来源:百度百科-INT
不对吧 我刚试了,
unsigned int a=-1;
printf("%d",a);
结果是-1
没有出错啊
上面我说错了,没加unsigned时,最高位被当成符号位,当然65535的unsigned int和int在内存中的二进制表示是一样的(假定int为2B),但又无符号位表示的范围不一样。当然你只是输出的话,可以通过输出格式强转,但这样没有意义,数据类型不是用来输出的,而是用来表示数据的,在int型超过65535之后就会变成负数!
TC下一个字节多少位?