Chinaunix首页 | 论坛 | 博客
  • 博客访问: 133500
  • 博文数量: 42
  • 博客积分: 2521
  • 博客等级: 少校
  • 技术积分: 440
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-31 21:29
文章分类

全部博文(42)

文章存档

2011年(1)

2010年(33)

2009年(8)

我的朋友

分类: C/C++

2010-08-11 18:19:44

(1). 如果你定义了一个unsigned int的变量,并赋一个负值给它会怎么样?
这时该unsigned int变量的内存表示和值为该负数的int变量的内存表示是一致的。
例如:unsigned int i = -1; 因为 -1 在作为有符号数int在内存中的表示为:ox ffff ffff,
所以该赋值操作实际上是把i置为其取值范围内的最大整数。if(i > 0) 的判断结果应该是真。
 
(2).如果一个操作数是无符号整数,另外一个操作数是有符号整数,那么表达式的结果就是无符号整数。
例如:unsigned int i = 4;
     int j = -5;
     if(i + j > 0) printf("result is unsigned!\n");
执行的结果是,printf语句被执行。因为 i + j的结果为-1,但将-1作为无符号数对待。
 
(3).可以想象,如果将无符号数强制转换为有符号数 或是通过无符号数赋值的方式:不改变内存表示,改变对待方式。(其实大多数强制类型转换都是这么做的,是不是全部都是呢?)
例如:int i = 0xffffffff;
     printf("i = %d\n",i);
     unsigned int n = 0xffffffff;
     i = (int) n;
     printf("i = %d\n",i);
输出的结果均为为-1。
阅读(2689) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~