数据在内存中的存储
数据类型
有符号数和无符号数
在C语言中,基本数据类型都可以分为有符号(signed)和无符号数(unsigned)。
signed unsigned 含义 有符号数 无符号数 写法 (signed) int,(signed) char,其中signed可省略不写 unsigned int,unsigned char
示例:
数据的储存
例如:char
char ,有符号类型,在内存中占1个字节。 可以表示负数,0,正数。表示的数据范[-128~127]
unsigned char ,无符号类型,在内存中占1个字节。可以表示0,正数。表示的数据范[0~255]
原码、反码、补码
无符号类型的数:原码、反码、补码都相同。
10
原码:00000000 00000000 00000000 00001010
反码:00000000 00000000 00000000 00001010
补码:00000000 00000000 00000000 00001010
有符号类型的负数的原码、反码和补码如下 :(先绝对,再减一, 然后取反)
-10
其中第一位表示符号,1表示负数,0表示正数
原码:10000000 00000000 00000000 00001010
符号位不变其余位取反
反码:11111111 11111111 11111111 11110101
在反码的基础上加一
补码:11111111 11111111 11111111 11110110
超出范围数据的计算方法
先计算整数的补码
把补码赋值给变量,然后观察变量的数据类型。
若是为unsinged char类型,一定为正数或0,原,反,补一样.%d输出的原码就是补码,直接转换为元素输出即可。
若是为char类型,观察变量内存存储数据的最高位,1 表示为负数,%d输出需要转换为原码输出
示例:
强制类型转换
含义: 采用某种方式将某种数据类型强制转换为我们需要的数据类型。
显示转换
格式:(数据类型)变量名
示例:
隐式转换
若运算符两边的类型不匹配。系统一般会默认触发隐式的强转。
规则如下:
示例: