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