C语言拾遗(一):整型提升

C语言拾遗(一):整型提升

开门见山,先来看一段简单的代码:

1 #include <stdio.h> array[] = {1, 2, 3, 4, 5, 6, 7}; 4 #define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0])) main() 7 { 8int i = -1; 9int x; (i <= TOTAL_ELEMENTS – 2) { 12x = array[i + 1]; , x); 14} , TOTAL_ELEMENTS); ; 19 }

执行结果:

randy@ubuntu:~/C_Language$ ./a.out

now i = 7.

是不是很奇怪?为什么没有打出line13的x = ?。

是这样的。这个小例子有三点值得注意:

1.sizeof()是运算符,网站空间,返回类型是无符号的,虚拟主机,即非负数。

2.if语句在singned int和unsigned int之间进行判断语句,根据C语言的整型提升规则,如果原始类型的所有值都可用int类型表示,香港空间,则其值将被转换为int类型;否则将被转换为unsigned int类型。因此此时的i将会被升级成无符号类型。

3.i = -1被升级为无符号型,值究竟是多少?这要用到整型转换规则:K&R上这样解释,将任何整数转换为某种指定的无符号数类型数的方法是:以该无符号数类型能够表示的最大值加1为摸,找出与此整数同余的最小的非负值。听着很拗口,其实说白了,只要知道原整数的二进制表达方法,再用要即将转换的类型去解析,就得到升级后的值了。 比如-1,负数在计算机里用补码表示,0xffffffff,那升级成无符号型之后,值就是0xffffffff,显然比TOTAL_ELEMENTS(7)大。

—End—

posted on

刺是与生俱来的,上帝在赐予优越感同时捆-绑的附属品;

C语言拾遗(一):整型提升

相关文章:

你感兴趣的文章:

标签云: