C中int和unsigned int的区别

时间:2016-12-29 07:02:19

标签: c

我知道unsigned int的范围是0< = I< = 2 ^ 32-1

然而,当我在C(visual 2015)中输入这样的内容时

void main(){
   unsigned int k = -10;
   printf("%d",k);
}

然后为什么电脑在屏幕上打印-10?我认为应该有错误。

2 个答案:

答案 0 :(得分:0)

以十六进制形式,-10是0xFFFFFFF6

unsigned int k = -10;表示

unsigned int k = 0xFFFFFFF6;

如果您说

,则打印此值

printf("%d",k);由于0xFFFFFFF6说明符,编译器会将值(%d)计算为整数。 (关于问题,请查看http://www.cplusplus.com/reference/cstdio/printf/

如果你说printf("%u",k);,编译器会将值(0xFFFFFFF6)计算为无符号整数,并打印一个介于0-2^32-1之间的值

答案 1 :(得分:0)

int默认存储已签名的数字,这意味着它们的范围可以从-2,147,483,648到2,147,483,647。 unsigned int表示您不会使用负数,因此范围要大得多,因为您已经释放了数字中最左边的位,通常用于表示它已签名(否定)或不。所以unsigned int可以从0到4,294,967,295。这也适用于类似char的类型,它们通常从-128到127,unsignedchar完全保留一个字节,或0到255。

Visual Studio(以及大多数编译器)应该向您发出警告,尝试将签名值存储到无符号类型中。