首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

unsigned int 赋值负数,该怎么处理

2014-01-17 
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打印的。

引用:
看了一段代码有点疑问.

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又作了一次转换改为%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来说,是没有数据类型的概念的,存储的只是寄存器或内存中的字节,本质没有区别。
至于负数,正数在内存中怎么存储你看看基础书籍

热点排行