【C语言】【数据存储】用%d打印char类型数据,猜结果是啥

题目代码如下:

#include <stdio.h>
int main()
{
 char a= -1;
 signed char b=-1;
 unsigned char c=-1;
 printf("a=%d,b=%d,c=%d",a,b,c);
 return 0;
}

解题关键:
1.二进制存储:原码,反码,补码 互换
2.截断
3.整型提升

1.二进制存储,截断:

-1 是个整型,存储形式应该是:
原码:1000000…00000001
反码:11111111…11111110
补码:11111111…11111111

而char类型占 1 个字节,8个 bit位,从低位发生截断:
11111111

2.整型提升,补码转原码:

注意:发生整型提升时才与变量类型有关(有无符号…)
%d 是打印十进制整型的,整型占 4 个字节
而 char 在vs中默认有符号整型,也就是 signed char

发生整型提升时
有符号的向高位加符号位
无符号的向高位补 0

此时 前两个补码:111111…111111111
第三个补码: 00000000…11111111
这是补码,写出它原码代表的数字就是要输出的值

前两个原码:10000000…00000001
第三个原码(原反补相同):00000000…11111111

所以前两个输出的都是 -1 ,第三个输出的是 255

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值