Chinaunix首页 | 论坛 | 博客
  • 博客访问: 312801
  • 博文数量: 53
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 598
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-09 13:20
文章分类

全部博文(53)

文章存档

2011年(2)

2010年(22)

2009年(29)

我的朋友

分类: C/C++

2010-03-27 12:28:32

如何转换int和unsign int???
 
char foo(void)
{
unsigned int a = 6;
int b = -20;
char c;
(a + b > 6) ? (c = 1) : (c = 0);
return c;
}
a+b的值不是-14,而是一个unsigned int类型的数4294967382,这个数字是如何来的?
(a + b > 6) ? (c = 1) : (c = 0); //这个地方 要有一个隐藏的类型转换 也就是int b转换成unsigned int类型 因为做运算的时候 要精度相同 避免丢失数据 因为是无符号的 自然就a+b>6了 所以选择C=1
 
 
至于怎么转换,其实很简单,int和unsigned int相比,只是符号位的区别,将以前表示符号的符号位看成是表示数值的就行!

比如:

对于4294967382
二进制是:
100000000000000000000000001010110

把第一位看做符号位,是负号,后面那一串,就是14

所以是-14
阅读(4038) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~