C语言进阶(一)
2018-03-04 22:10
302 查看
1、内存是线性的。
2、数据类型分类:基本数据类型,构造数据类型。
基本数据类型分为:整型,实型。
整型分为:char,short,int,long int,
实型分为:float,double,long double。
构造数据类型分为:结构体,共用体,数组,枚举,指针,构造类型。
补码
1、同样是1个字节8个位,原码表示数值范围是0-255,补码表示范围是-128-127,这说明,不同的编码规则导致不同的数据范围。
2、补码编码规则,0表示正数,1表示负数,正数的补码是他本身,负数的补码是原码各位取反后加1,-128的补码是1000 0000,-1的补码是1111 1111。
3、因为补码符号位可以和普通位参与运算,所以一般数据类型有符号数在内存都是补码形式,方便参与算术运算。
4、补码转换成10进制,只要各位取反然后按2进制计算即可。
数据类型转换
规则:
小数据赋给大数据,系统为保证数据完整性,采用符号扩充行为,
大数据赋给小数据,会发生截断行为,有可能造成数据丢失。
注意,数据在内存形式是补码形式,所以下面显示的二进制数据也是补码
小数据赋给大数据:
![](https://img-blog.csdn.net/20180304211154214?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbW96aGFfNjY2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
大数据赋给小数据(没发生数据缺失的情况):
![](https://img-blog.csdn.net/2018030421121570?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbW96aGFfNjY2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
大数据赋给小数据(发生数据缺失的情况):
![](https://img-blog.csdn.net/20180304211450555?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbW96aGFfNjY2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
基本类型之间的转换:
![](https://img-blog.csdn.net/20180304211840135?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbW96aGFfNjY2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
一般数据类型小要往大的那方转换,还有要注意unsigned int 和int 数据一起运算时,要转成unsigned int
相应习题:
![](https://img-blog.csdn.net/20180304212535233?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbW96aGFfNjY2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
打印结果是:xxxxxxx
解题思路:
首先b要转换成unsigned int,b的补码形式是
1000 0000 0000 0000 0000 0000 0110 0100
上面的数据按无符号数计算,结果为非常大的正整数所以再加上a结果肯定大于a.
![](https://img-blog.csdn.net/20180304212559895?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbW96aGFfNjY2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
打印结果是:ooooooo
解题思路:
和上面类似,-1的补码是 ff ff ff ff,在加上a会溢出变为负数,所以结果比a小。
2、数据类型分类:基本数据类型,构造数据类型。
基本数据类型分为:整型,实型。
整型分为:char,short,int,long int,
实型分为:float,double,long double。
构造数据类型分为:结构体,共用体,数组,枚举,指针,构造类型。
补码
1、同样是1个字节8个位,原码表示数值范围是0-255,补码表示范围是-128-127,这说明,不同的编码规则导致不同的数据范围。
2、补码编码规则,0表示正数,1表示负数,正数的补码是他本身,负数的补码是原码各位取反后加1,-128的补码是1000 0000,-1的补码是1111 1111。
3、因为补码符号位可以和普通位参与运算,所以一般数据类型有符号数在内存都是补码形式,方便参与算术运算。
4、补码转换成10进制,只要各位取反然后按2进制计算即可。
数据类型转换
规则:
小数据赋给大数据,系统为保证数据完整性,采用符号扩充行为,
大数据赋给小数据,会发生截断行为,有可能造成数据丢失。
注意,数据在内存形式是补码形式,所以下面显示的二进制数据也是补码
小数据赋给大数据:
大数据赋给小数据(没发生数据缺失的情况):
大数据赋给小数据(发生数据缺失的情况):
基本类型之间的转换:
一般数据类型小要往大的那方转换,还有要注意unsigned int 和int 数据一起运算时,要转成unsigned int
相应习题:
打印结果是:xxxxxxx
解题思路:
首先b要转换成unsigned int,b的补码形式是
1000 0000 0000 0000 0000 0000 0110 0100
上面的数据按无符号数计算,结果为非常大的正整数所以再加上a结果肯定大于a.
打印结果是:ooooooo
解题思路:
和上面类似,-1的补码是 ff ff ff ff,在加上a会溢出变为负数,所以结果比a小。
相关文章推荐
- C语言及程序设计进阶例程-36 文件的随机读写
- [C语言]进阶|结构类型: 枚举, 结构, 类型定义
- C语言及程序设计进阶例程-39 银行储蓄系统(第六版)开发
- C语言进阶-4讲: 外部全局变量和静态全局变量
- C语言进阶-第11~13讲:结构体实践(该年第几天&紧急救援)
- C语言进阶-第15~16讲:结构体应用(学生成绩统计)
- C语言进阶-第19讲:链表应用(链表的合并)
- C语言之运算符进阶
- C语言及程序设计进阶例程-26 回溯溯法问题求解
- [C语言]进阶|程序结构
- C语言进阶【文件】常用文件操作函数详解(一) 推荐
- c语言进阶--二级指针
- C语言进阶-6讲: 递归法问题求解
- C语言及程序设计进阶例程-5 认识递归
- C语言及程序设计进阶例程-21 银行储蓄系统(第五版)开发
- C语言进阶-第 4000 19讲:链表应用(改造链表)
- C语言及程序设计进阶例程-27 贪心法问题求解
- C语言及程序设计进阶例程-38 非标准文件及其操作
- C语言个人进阶
- C语言进阶-第36~37讲:随机读写&二进制文件&文件操作整理