- 课程名称:嵌入式工程师
- 学习章节:数据在内存中的储存
- 学习链接:https://class.imooc.com/sc/148/learn
- 讲师姓名:大白老师
课程内容:
数据在内存的储存
有符号和无符号
平时写的int a 就是 signed int a 不过这个signed省略了
8it数据储存
有符号
char ,有符号类型,占1bytes。 可以表示负数,0,正数。范围[-128~127] -128 ~ -1 0~127
无符号
unsigned char ,无符号类型,占1bytes。可以表示0,正数。范围[0~255]
8bit=1bytes
超出范围数据的计算方法
概论
如上,有符号和无符号数据范围是不一样的,如果数据超出上面范围了,该怎么计算
设计规则
无符号类型的数原码,反码,补码是它本身. [正数和0]
有符号类型的数的最高位表示符号位,0表示为正数,1表示为负数
负数的反码 = 符号位不变,其他位按位取反
负数的补码 = 反码 + 1
计算方法
方法
先计算整数的补码(=右边的数)
把补码赋值给变量,然后观察变量的数据类型
unsigned char
若是为unsinged char类型,一定为正数或0,原,反,补一样.%d输出的原码就是补码,
直接转换为原数输出即可。
char
若是为char类型,观察变量内存存储数据的最高位,1 表示为负数,%d输出需要转换为原码输出
个人理解
char a其中char是变量类型a是变量,先判断变量是正数还是负数
正数的补码
负数的补码
观察变量的类型
unsigned char
补码转换原数输出就可以
char
最高位1
负数转换原码输出
最高位0
正数转换原数输出就可以
观察变量的类型
unsigned char
补码转换原数输出就可以
char
最高位1
负数转换原码输出
最高位0
正数转换原数输出就可以
学习收获:
和之前学的补码那些知识点完美的串了起来
也理解了 如果数据超出内存的呈现方式
之前看到输出的结果,现在也理解了逻辑
截图打卡: