请教一下C语言中按位取反~的使用

#include<stdio.h>intmain(void){unsignedchari=0,j=0;i=0xFF;j=0x00;if(i==~j){printf("正确... #include <stdio.h>

int main(void)
{
unsigned char i = 0, j = 0;

i = 0xFF;
j = 0x00;

if(i == ~j)
{
printf("正确\n");
}
else
{
printf("错误\n");
}

return 0;
}
这道题的答案是什么
展开
 我来答
旅堡衍e
推荐于2018-04-05 · TA获得超过119个赞
知道小有建树答主
回答量:144
采纳率:100%
帮助的人:105万
展开全部
short、char在算术运算时,如果int可以容纳原来的范围,则首先提升为int,否则提升为unsigned int.
也就是说,你这题跟i的类型是不是int没关系,只要执行~运算,char型的就会首先提升成int。
用以下代码可以证明
char a = 1;
printf("%d\n", sizeof(~a));

所以i = 0xFF ~j=0xFFFFFFFF 就不相等了
百度网友e571edf
2015-02-15 · 超过32用户采纳过TA的回答
知道答主
回答量:78
采纳率:50%
帮助的人:62.5万
展开全部
错误 i = 0xFF ~j=0xFFFFFFFF 所以不相等

定义 改成char i = 0, j = 0; 则输出正确
更多追问追答
追问
j不是unsigned char类型的吗?为什么按位取反以后数据类型都变了
追答
按位取反默认变成有符号的了 也就是~j =-1了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jiyi1201
2015-02-15
知道答主
回答量:26
采纳率:0%
帮助的人:14.1万
展开全部
错误

i=255
j=0
~j=-1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友641e82b
2015-02-15 · TA获得超过350个赞
知道小有建树答主
回答量:408
采纳率:0%
帮助的人:262万
展开全部
i = 0xFF;
j = 0x00;

~j返回0xffffffff

所以i==~j是不成立的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jrftsy96
2015-02-15 · 超过12用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:35.6万
展开全部
既然是无符号的字符类型,这个应该是printf 正确
追问
可是答案是“错误”
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式