c语言的一个问题,请教高手。

intf=0xcffffff3;printf("%x\n",f>>2);printf("%x\n",0xcffffff3>>2);为什么打印结果不一样?... int f = 0xcffffff3;
printf("%x\n",f>>2);
printf("%x\n",0xcffffff3>>2);
为什么打印结果不一样?
展开
 我来答
White_MouseYBZ
2013-05-01 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6646万
展开全部
printf("%x\n",0xcffffff3>>2);中的0xcffffff3没有赋给变量,编译器把它按其大小解释为无称号数;而int f = 0xcffffff3;中的f是int型,0xcffffff3由于最高位是1,就按负数取补存放了。无论正数负数,右移位时符号位是跟随的,所以造成结果不同。
追问
直接写printf("%d\n",10);这里的10默认是无符号的么?
如果是int a = 10; 前面不加signed或unsigned 默认是那个?
追答
都不知道你在问什么,你都定义了int a = 10,还需要谁去默认呢?printf("%d\n",10);中10是有符号的,要按%d来处理;你举的这个例子不能说明问题,问题中是有操作的(>>),而这里没有;没有声明的整数在操作时是按无符号对待的,而输出时是按控制符来转换的,就是说,如果是printf("%d\n",10+1);,那么10+1时10是无符号的,而把结果11输出时是有符号的。而且这可能还与编译器有关,但我没有试过,只是推测。严格说来“无符号”可能也欠妥,应该是按正数对待,尽管它超出了正数范围;只有前面加"-"号了才作负数解。个人管见,只供参考……
郝在益
2013-05-01 · TA获得超过2079个赞
知道小有建树答主
回答量:1496
采纳率:54%
帮助的人:631万
展开全部
根据编译器的不同,int类型数据所占据的空间是不同的,有的是2个字节,有的是4个字节。如果是2个字节的,你所表达的数据就超过了范围,所以显示的结果就不一定一样了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chenfenggang99
2013-05-01 · TA获得超过1850个赞
知道大有可为答主
回答量:1746
采纳率:75%
帮助的人:1746万
展开全部
int f = 0xcffffff3;
转化为整形的超过了int的范围,所以变成负数,然后移动就出问题了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fly_height
2013-05-01 · 超过38用户采纳过TA的回答
知道小有建树答主
回答量:124
采纳率:0%
帮助的人:70.8万
展开全部
f>>2 进行的是带符号右移最高位补符号位,这里是1,最后得到值为f3fffffc

0xcffffff3>>2 进行的是不带符号右移最高位补0 最后得到值为33ffffc
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式