本章重点

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
条件恒成立
死循环

©著作权归作者所有:来自51CTO博客作者拾风的原创作品,如需转载,请注明出处,否则将追究法律责任

你的鼓励让我更有动力

赞赏

0人进行了赞赏支持

更多相关文章

  1. C语言中的原码、反码、补码。
  2. C编程基础-基础篇 2
  3. 关于Android(安卓)Studio开发环境变量的设置(avd启动黑屏)
  4. Android(安卓)特殊符号的转码大全
  5. 宏定义中的特殊参数(#、##、...和__VA_ARGS__)
  6. ndk编译 错误:dlopen failed:cannot locate symbol "一个符号" r
  7. TextView在显示文字的时候有个问题就是一行还没显示满就跳到下一
  8. Android(安卓)TextView自动换行文字排版参差不齐的原因及解决办
  9. kotlin

随机推荐

  1. coco2dx编译到android出现please define
  2. Android截屏分享
  3. android 里 meta-data 的使用
  4. 两分钟彻底让你明白Android中onIntercept
  5. iOS及Android消息推送方案安装使用入门
  6. Android硬编码——音频编码、视频编码及
  7. 【Android 开发】: Android 消息处理机制
  8. Ubuntun下Android(安卓)SDK环境搭建
  9. android 工具类 DateUtil
  10. android自定义属性的使用