C语言进阶(一)

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小。


  • 9
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值