本章重点
数据的储存(一)(整形)(零基础学习C语言)
1.数据类型的详细介绍
数据的储存(一)(整形)(零基础学习C语言)
内置类型就是C语言自己有的类型
数据的储存(一)(整形)(零基础学习C语言)
根据存储形式具体分为:
char分为整形
是因为char类型的变量在计算机中存储的是ASCII码值
ASCII码值是int类型的
空间大小
存储类型
数据的储存(一)(整形)(零基础学习C语言)
如:
打开内存后发现
整形和浮点型的存储形式不一样
数据的储存(一)(整形)(零基础学习C语言)
数据的储存(一)(整形)(零基础学习C语言)
unsigned(无符号)默认为正数,最高位不看做符号位,看做有效位(数字的范围会更大些)
signed(有符号)有正有负
计算机存储的是二进制的补码
最高位为符号位(0为正,1为负)
一般默认signed不写
即:signed int 写为int
这几种写法相同
数据的储存(一)(整形)(零基础学习C语言)
数据的储存(一)(整形)(零基础学习C语言)
去掉数组名剩下的就是数组类型
数据的储存(一)(整形)(零基础学习C语言)
指针类型就是 相应类型加颗(*)
数据的储存(一)(整形)(零基础学习C语言)
C语言中未规定,()传不传参数都可以
数据的储存(一)(整形)(零基础学习C语言)
如果确定要无参
可以:
数据的储存(一)(整形)(零基础学习C语言)
但是依旧跑的过去,不会报错,但是会报警告
2.整形在内存中的存储(原反补码)
数据的储存(一)(整形)(零基础学习C语言)
数据的储存(一)(整形)(零基础学习C语言)
注意:是有符号整数
最高位为符号位
数据的储存(一)(整形)(零基础学习C语言)
数据的储存(一)(整形)(零基础学习C语言)
原码,将二进制的最高位加上(0,1)对应的符号位即可
数据的储存(一)(整形)(零基础学习C语言)
反码:
正数的反码与原码相同
负数的反码是符号位不变,其他位按位取反即可
数据的储存(一)(整形)(零基础学习C语言)
补码:
正数的补码与原码相同
负数的补码是在反码的基础上加1即可
数据的储存(一)(整形)(零基础学习C语言)
例如:
内存中向我们展示时是以16进制展示的
4个二进制数转化为1个16进制位
数据的储存(一)(整形)(零基础学习C语言)
总结:
正数的,原码,反码,补码都相同
计算机中存放的是二进制的补码(大端存储还是小端存储得看编译器)
数据的储存(一)(整形)(零基础学习C语言)
数据的储存(一)(整形)(零基础学习C语言)
数据的储存(一)(整形)(零基础学习C语言)
3.大小端字节序介绍及判断
a空间中存储的内容
数据的储存(一)(整形)(零基础学习C语言)
b空间中储存的内容
数据的储存(一)(整形)(零基础学习C语言)
数据的储存(一)(整形)(零基础学习C语言)
大端存储:数据的低位放在内存高地址处
小端存储:数据的高位放在内存低地址处
数据的储存(一)(整形)(零基础学习C语言)
都是相对而言的
数据的储存(一)(整形)(零基础学习C语言)
描述的是字节存放的顺序而不是二进制位的顺序
1个字节8个bit2个16进制位
因为内存是以基本单位字节划分的
数据的储存(一)(整形)(零基础学习C语言)
数据的储存(一)(整形)(零基础学习C语言)
例:
数据的储存(一)(整形)(零基础学习C语言)
写一个程序判断数据是大端存储还是小端存储
数据的储存(一)(整形)(零基础学习C语言)
思路:
(描述的是字节存放的顺序而不是二进制位的顺序)
设置一个变量
将它赋值为1
看他的第一个字节是1还是0
如果是1则为小端存储
如果是0则为大端存储
数据的储存(一)(整形)(零基础学习C语言)
利用指针取出第一个字节
数据的储存(一)(整形)(零基础学习C语言)
char*访问一个字节
数据的储存(一)(整形)(零基础学习C语言)
代码优化:
数据的储存(一)(整形)(零基础学习C语言)
函数简化:
数据的储存(一)(整形)(零基础学习C语言)
函数简化:
数据的储存(一)(整形)(零基础学习C语言)
练习一:
记住-1的二进制补码为全1
1.(二进制补码)先转化为整形大小
2.-再截断为char
3.-最后整形提升得到补码再进行转换
(如果是有符号的,整形提升时前面补符号位)
数据的储存(一)(整形)(零基础学习C语言)
练习二
数据的储存(一)(整形)(零基础学习C语言)
char的不同类型的范围分析
数据的储存(一)(整形)(零基础学习C语言)
注意有符号类型的char的范围是-128---->127
127+1=-128
数据的储存(一)(整形)(零基础学习C语言)
练习三:
两个数的结果都是-128
都是-1
数据的储存(一)(整形)(零基础学习C语言)
练习四:
将无符号数也转化为二进制的补码(为正数,原反补码相同)
有符号数也转化为二进制的补码
补码相加,进位的话舍去
最后按要求格式化为有符号整数
数据的储存(一)(整形)(零基础学习C语言)
分析:
数据的储存(一)(整形)(零基础学习C语言)
例题五:
数据的储存(一)(整形)(零基础学习C语言)
死循环了
因为无符号数一定大于0
例题六:
数据的储存(一)(整形)(零基础学习C语言)
strlen计算的是\0前的数字即是0前有多少个数字
有符号类型的char的范围是-128---->127
数据的储存(一)(整形)(零基础学习C语言)
例题七:
数据的储存(一)(整形)(零基础学习C语言)
死循环
unsigned char的范围是0---->255
条件恒成立
死循环