#重新学习C语言#之一
对于文章的内容,写法,欢迎任何的讨论。
开门见山,直接看一段很简单的代码.
-
#include <stdio.h>
-
-
int array[] = {1, 2, 3, 4, 5, 6, 7};
-
#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
-
-
int main()
-
{
-
int i = -1;
-
int x;
-
-
if(i <= TOTAL_ELEMENTS - 2) {
-
-
x = array[i + 1];
-
printf("x = %d.\n", x);
-
}
-
printf("now i = %d.\n", TOTAL_ELEMENTS);
-
return 0;
-
}
输出结果:
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) |