数据的存储(1) -- 整形的存储

目录

一、整型数据以补码的形式在内存中存储

 1. 原反补码转换

 2.二进制补码计算 

 3.有符号与无符号类型数据的取值范围

二、大小端字节序

三、整型数据存储练习题 


一、整型数据以补码的形式在内存中存储

内存中存储的是补码 。整型在内存中以二进制补码的形式存储,不过为了方便,以16进制显示。

  1. 原反补码转换

二进制最高位是符号位。最高位的1表示负数,0表示正数。

原码 --- 取反--->反码 --- +1--->补码     注意:取反时,符号位不变

补码 --- -1--->反码 --- 取反--->原码

补码 --- 取反--->反码 --- +1--->原码   

例如:负数-1 

2.二进制补码计算 

内存中存储的是补码(计算用的也是补码),打印的是原码。

如果为char、short类型数据相加,需要进行隐式类型转换,详情可见整型提升 

3.有符号与无符号类型数据的取值范围

例题:这道题输出结果? 

 答案:无符号整型>=0恒成立,所以程序会死循环

二、大小端字节序

在文章开头的内存截图中,数据02 00 00 00倒着放。为什么呢?这涉及到大小端字节序的问题。

助记小课堂: 

注意事项:  大端小端是字节序。既然是字节之间的顺序,只有>1的数据类型才会讨论字节序。char类型是不存在字节序的。

 例题:

三、整型数据存储练习题 

练习提示:从第四题开始会涉及整型提升的知识,相关文档链接在本篇文章开头~

🙋🏻‍♂️例题1:这道题输出结果是多少? 

 分析:

 答案:10

🙋🏻‍♂️例题2:这道题输出结果是多少?

分析:

答案:无限循环

🙋🏻‍♂️例题3:这道题输出结果是多少? 

分析:

 答案:a = b = -1 ; c = 255

🙋🏻‍♂️例题4:输出结果是多少?

分析:

 答案:4294967168

🙋🏻‍♂️例题5:这两个程序的输出结果相同吗?

分析: 

            第一个程序 -128                                                         第二个程序 128

原码 10000000 00000000 00000000 10000000        00000000 00000000 00000000 10000000   

反码 11111111   11111111   11111111   01111111         01111111   11111111   11111111   01111111

补码 11111111   11111111   11111111  10000000         01111111   11111111   11111111  10000000

①存储在char类型中 -> 截断得10000000                    ①存储在char类型中 -> 截断得10000000 

②%u 输出整数 -> 整型提升                                         ②%u 输出整数 -> 整型提升

   char默认有符号char  高位补符号位                             char默认有符号char  高位补符号位

补码  11111111   11111111   11111111  10000000             11111111   11111111  11111111  10000000 

原反补相同,补码就是原码

答案:输出相同

🙋🏻‍♂️例题6:输出结果是多少?

分析:

strlen停止的标志是0。所以需要先找到,数字减为0的情况,再计算总共有多少数。

-i 就是⚪左边的数字。-i-1就是黄色箭头逆时针循环。-1-1=-2 ➡ -2-1=-3...➡ -128-1=127 ➡ 1-1=0

🙋🏻‍♂️例题7:输出结果是多少?

 分析:这个跟前面的第2题是类似的。0<=无符号取值范围<=255 恒成立

 答案:死循环输出hello world

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值