unsigned int 赋值负数,该怎么处理
unsigned int 赋值负数看了一段代码有点疑问.void test(unsigned int a){printf(the a value is %d\n,
unsigned int 赋值负数
看了一段代码有点疑问.
void test(unsigned int a)
{
printf("the a value is = %d\n",a);
}
void main()
{
int c = -10;
test(c);
}
结果是-10;
有如下几个问题点.
1.unsigned int的取值范围不是0~2^32吗?为什么可以是负数呢,
2.test函数的参数是unsigned int,把int传进来的时候,会有隐式的类型转换吗?如果有也是转到unsigned int啊.
3.如果定义unsigned char型,结果就是一个正数.为什么呢?
拜托大家给我普及一下,
[解决办法]
%d会按照int来打印,%u才是按照unsigned打印的。
[解决办法]%d又作了一次转换改为%u
[解决办法]-10 32位机
原码为1000 0000 0000 0000 0000 0000 0000 1010
即0x8000 000A,
补码为1111 1111 1111 1111 1111 1111 1111 0110
即0xFFFF FFF6
计算机把负数是用被码存储的.如果你把它当成unsigned int看就是0xFFFF FFF6
数据还是哪个数据,就看你用什么角度去用.
[解决办法]数据类型是编译器给的一个限定。基于c的传统,c++编译器对这个的限制有些宽松。
实际对于cpu来说,是没有数据类型的概念的,存储的只是寄存器或内存中的字节,本质没有区别。
至于负数,正数在内存中怎么存储你看看基础书籍