Chinaunix首页 | 论坛 | 博客
  • 博客访问: 70336
  • 博文数量: 5
  • 博客积分: 272
  • 博客等级: 二等列兵
  • 技术积分: 100
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-22 22:01
文章分类

全部博文(5)

文章存档

2013年(1)

2011年(3)

2010年(1)

分类: C/C++

2013-03-16 23:03:11

#重新学习C语言#之一
对于文章的内容,写法,欢迎任何的讨论。
开门见山,直接看一段很简单的代码.

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int array[] = {1, 2, 3, 4, 5, 6, 7};
  3. #define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))

  4. int main()
  5. {
  6.         int i = -1;
  7.         int x;

  8.         if(i <= TOTAL_ELEMENTS - 2) {

  9.                 x = array[i + 1];
  10.                 printf("x = %d.\n", x);
  11.         }
  12.         printf("now i = %d.\n", TOTAL_ELEMENTS);
  13.         return 0;
  14. }


输出结果:
randy@ubuntu:~/C_Language$ ./a.out
now i = 7.

是不是很奇怪?为什么没有输出x = 0?
这是因为TOTAL_ELEMENTS的值为7,但他是一个unsigned int类型。而i是int型,当int型数据和unsigned int型数据比较时,根据C语言算数类型转换原则,
int将会升级为unsigned。而-1转换为unsigned将是一个很大的数。因此if条件判断不成立。

小结:
1.sizeof()运算符的返回值是无符号型。
2.转换:整型提升。int->unsigned int。
3.有符号数和无符号数的转换:补码,原码,反码。一切都是二进制,只是解析方法不同。





阅读(1915) | 评论(0) | 转发(0) |
0

上一篇:C语言中的副作用和时序点

下一篇:没有了

给主人留下些什么吧!~~