我知道unsigned int的范围是0< = I< = 2 ^ 32-1
然而,当我在C(visual 2015)中输入这样的内容时
void main(){
unsigned int k = -10;
printf("%d",k);
}
然后为什么电脑在屏幕上打印-10?我认为应该有错误。
答案 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,unsigned
,char
完全保留一个字节,或0到255。
Visual Studio(以及大多数编译器)应该向您发出警告,尝试将签名值存储到无符号类型中。