char类型的变量以十六进制输出,如下,为什么要补1?

为什么大于0x80时要补1输出?#include<stdio.h>intmain(){chara=0x70,b=0xd0;printf("%#x,%#x\n",a,b);... 为什么大于0x80时要补1输出?
#include<stdio.h>
int main()
{
char a = 0x70,b=0xd0;
printf("%#x,%#x\n",a,b);
}
上面的结果输出为0x70,0xffffffd0
展开
 我来答
金色潜鸟
2018-01-10 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5708万
展开全部
因为 %x 格式输出时 它自动作了 (int) 的 强制转换。
对 char 型,你可以用 0xff & ch 的方法,只取1字节。例如:
#include <stdio.h>
int main(){
char a = 0x70,b=0xd0;
printf("%#x,%#x\n",a,b); // 转 int 输出
printf("%#x,%#x\n", 0xff & a, 0xff & b); // 取1字节输出
return 0;
}
听不清啊
高粉答主

2018-01-10 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
因为char类型表示的范围是-128~+127,是有符号类型。
所以,当128~255之间的数赋值给char时,它就变成了“负数”,所以当它以更多位的二进制读取时,前位就会补1。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
JHFLOY
2018-12-17
知道答主
回答量:2
采纳率:0%
帮助的人:1523
展开全部
char存储上限不够,只有0-127 ,即0-0x7f,所以当char a >0x7f的时候,%x会自动帮你扩大存储上限
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式