整型常量的问题
发表在C语言图书答疑 2013-07-20
是否精华
版块置顶:

#include<stdio.h>
void main()
{
int a,b;
a=-65535u;
b=a+1;
printf("%d,%d\n",a,b);

}
-65535,-65534
Press any key to continue
因为:根据“一个整常量后面加一个字母u或U,认为是unsigned int 型,
如12345u 在内存中按unsigned in规定的方式存放(存储单元中最高位不作为符号位,而用来存储数据),
如果写成-12345u,则先将-12345转换成其补码53191,然后按无符号数存储。”(书中 P45)
问:①,为什么上述程序中a=-65535u;这样定义后,因为-65535是“有符号数”,后面加一个U变成“无符号数”。
这样应该会矛盾啊,为什么运行后的结果却是“对”的呢?
②,int的范围是-32768~32767   定义了int a,b; 为什么还能得到-65535,-65534的结果?都超出int的范围是-32768~32767
    和 unsigned int 0~65535 的范围了啊。


分享到:
精彩评论 1
cui_mrkj
学分:0 LV1
TA的每日心情
?
2020-08-20 13:57:19
2013-07-24
沙发
1、printf("%d,%d\n",a,b); //%d是按有符号十进制整数输出,%u是按无符号输出。
-65535u 先把负数转换成无符号的二进制数存到内存中,在转换成十进制输出。有符号数转二进制时最高位用来做符号标志位。
输出结果是4294901761。
2、int类型在TC下是2字节16位,范围是-2^15到2^15-1。
在VC下是4字节32位,范围是-2^31到2^31-1,(-2147483648到2147483647)。没有超出范围。
首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照