【时时三省】(C语言基础)数据的存储2

山不在高,有仙则名。水不在深,有龙则灵。

                        ----CSDN 时时三省

例题1:

输出什么?

5c74f4ff1dd5437cb7047d9de7662424.jpg

 输出结果为-1 -1 255

为什么结果是这样呢

-1的原码

10000000000000000000000000000001

反码

11111111111111111111111111111110

补码

11111111111111111111111111111111

但是如果放在a里面 a是一个字节

所以存的就是11111111

signed char b 

signed表示有符号的char

所以这个b存的就是11111111

unsigned char c

unsigned表示无符号的c

也是存的11111111

上面的a和b都认为它是有符号的所以他的第一个1就是符号位 但是c表示的就是全是有效数字没有符号位

补码以%d打印的时候要看它的原码 所以a=-1

b跟a一样的 

无符号位的整形提升高位补0 整形提升以后这就是它的补码

00000000000000000000000011111111

它是正数,所以它的原反补相同

所以它的结果就是255

补充:

1.char到底是signed char还是unsigned char

C语言标准并没有规定,取决于编译器

2.int是signed int 这个是有规定的

3.short是 signed short 这个也是有规定的

例题2:

734ced902b06467d8a0f9bc94f5cf5ff.jpg

 %u是打印一个无符号数

-128的原码是

10000000000000000000000010000000

反码

11111111111111111111111101111111

补码

11111111111111111111111110000000

char a存的就是10000000

整形提升后就是

11111111111111111111111110000000

如果以%u的形式打印 就是没有符号位了

那它的补码就是它的原码

它的结果打印出来就是

4294967168

例题3:

d3572ffb5b494ecd827c9369d3b0d39e.jpg

 跟上面打印的结果是一样的

128的原码

00000000000000000000000010000000 原反补相同

a里面放的是10000000

整形提升后

11111111111111111111111110000000

%u打印无符号数 所以上面的数字都是有效数字

结果就是4294967168

注意:

有符号的char的取值范围是:-128~127之间

例题4:

e4783161a16c4206ad91dc5ea174997d.jpg

 -20的原码

10000000000000000000000000010100

反码

11111111111111111111111111101011

补码

11111111111111111111111111101100

10的原码

00000000000000000000000000001010

它俩的补码相加就是

11111111111111111111111111110110-补码

%d打印的是原码结果

把它变成原码就是

10000000000000000000000000001010

结果就是-10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时时三省

网络乞丐,在线乞讨。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值