- 论坛徽章:
- 0
|
c程序中的常量是如何被处理的?
原帖由 "wang_songyan" 发表:
如果执行printf("%d",3276 呢? 如果是立即数结果应该是32768而不是
-32768
我明白你地意思了,你这个应该属于溢出的情况。
举一个简单地例子吧,假设有一台机器是2位的,那么对于一个2位表示的有符号数来说,数值的范围是-2~1,也就是说是2^(n-1)~2^(n-1)-1,其中n是cpu的位数。这样,在这个假设存在的2位的cpu中,-2的有符号的二进制表示是10,而2也是10,但是2不在它的表示范围之内(前面说过有符号数的范围是-2~1),因此计算机就把它解释成为-2了.
具体的你可以去看看微机原理中讲述补码表示和有符号,无符号数的表示,对于printf这样的函数而言,你需要记住一点:里面的格式化字符串决定了如何去解释数据,同样的数据,不同的解释方法是不一样的,比如:
- int x = -12345;
- printf("x = %hdn", x); /* 输出-12345 */
- printf("x = %hun", x); /* 输出53191 */
复制代码
当然,上面的这个测试程序是在32位机子上的,16位的可能不一样。 |
|