关于C语言的无符号整型?

为什么换个数据类型就不一样... 为什么换个数据类型就不一样 展开
 我来答
风若远去何人留
2021-10-04 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450131
专业C/C++软件开发

向TA提问 私信TA
展开全部
有符号和无符号的区别就在于最高位
有符号的最高位是符号位,1表示负数,0表示正数
无符号所有数位都是表示数值的
当输入-1的时候,相当于赋值c=-1,根据补码规则,-1的十六进制在int类型下是0xffffffff,按照%d输出-1,按照%u输出无符号就是2的32次幂-1,也就是你输出的那个值

而如果定义unsigned char,实际上用%u或者用%d输入是有风险的,因为会实际赋值4个字节,本质上是越界的,正确做法是%hhd或者%hhu
不管怎么样,还是把赋值成了0xff,至于越界的三个字节赋值给谁就不知道了
用%u或者%d输出就都是255了,也就是2的8次幂-1这样的一个值
如果定义的不是unsigned char c,而是char c,那么你会得到另一个不同的结果了
听不清啊
高粉答主

2021-12-18 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
这是因为这两种数据类型所占的字节数不一样,因为大家都是unsigned,所以输入负10,他们填充的数据都是二进制全1,只是int,填充的是四个字节,而char填充的是一个字节。所以当以int形式输出时,系统把char的八个二进制位全部填充在了int的最低位,前面更高的位上都是0,所以就造成这时输出的两个都是正数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式