您的位置:首页 > 编程语言 > C语言/C++

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进制计算即可。

数据类型转换

规则:

小数据赋给大数据,系统为保证数据完整性,采用符号扩充行为,

大数据赋给小数据,会发生截断行为,有可能造成数据丢失。

注意,数据在内存形式是补码形式,所以下面显示的二进制数据也是补码

小数据赋给大数据:



大数据赋给小数据(没发生数据缺失的情况):



大数据赋给小数据(发生数据缺失的情况):



基本类型之间的转换:



一般数据类型小要往大的那方转换,还有要注意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小。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息