当前位置:网站首页>C语言进阶数据类型详解
C语言进阶数据类型详解
2022-07-22 18:07:00 【我的博尔赫斯】
最近我学了C语言进阶版数据类型。关于这一节可以分成整型家族,浮点型家族,boll型,指针类型,构造类型,等等,接下来再了解一下把。
一.类型
1.整型家族

这里为啥说char也属于整型家族呢?这是因为字符本质上是ASCLL码,所以字符其实属于整型家族。
在这里还要提的一点是int, short, float, double ,都是分 有符号和 无符号类型的 ,当然char也分这两种,但是后者和前者是有区别的,前者有符号与否可由我们指定,即 (signed) int / short / float / long等等 表示有符号,unsigned int / short / float / long等等 表示无符号。
对于有符号来说既可放正值也可以放负值,但是对无符号来说可以放正值也可以放负值(没想到吧),但是放负值会转化成相应正值(注意!!不是简单的去负号,而是根据原反补码转化)
打印无符号整型用的是%u,老铁们不要用错了啊!
2.浮点型家族

这一家人结构挺简单,就只有两个人,单精度哥哥与双精度弟弟,没啥好说的,知道就差不多了。
3.构造类型
这一类型也叫做自定义类型,因为它是可以自定义的(废话文学)。
数组类型之所以属于自定义类型是因为数组元素个数也属于数组类型一部分。
其余的类型就不再赘述了,我们来看看整型在内存中的存储吧。
二. 整型在内存中的存储
谈到这个问题,我们就不得不谈一下原反补码了。
1.原,反,补码
原码是指按照一个数的正负值直接写出来的二进制序列。
在32位二进制序列中最高位是符号位,表示正负。
如1的原码是00000000000000000000000000000001
如-1的原码是10000000000000000000000000000001
反码是指在原码的基础上除符号位外其余位全部按位取反得到的二进制序列。
补码是指在反码的基础上减1得到的二进制序列。
对于正数来说原反补码相同,所以正数只需要知道其原码就行,复数才需要进行三种码之间的转换
下面我们以-5为例展示如何转换

内存中存储的是整型的补码。!!!!
有一个很好玩的事,就是
从原码到补码和从补码到原码的途径是完全相同的,不信你看下面这张图。

那么这里我们迎来了一个无法避免的问题,我们为啥要把好好的一个数字拆成原反补码呢?
2.为什么要有补码?
这个解释有点抽象,我们拿一个具体一点的例子来解释
例如 -1 + 1
倘若我们直接拿原码计算,则结果是这样的

这个结果显然不对,那我们再看看用补码计算:
这样算答案就对了,所以说必须得有补码呀,至于科学家是怎么想到的,我只能说:天才呀!
3.大小端字序存储

这里咱创建了一个变量a,那自然得为它分配空间,在内存窗口中以十六进制展现,但是奇怪的是为啥a的二进制序列它倒过来了?这就涉及到我们这个大小端的知识了
因为啊咱的数据它大小超过了一个字节啊,它就得有一定的顺序,比如说0x11223344,你放内存里面就有好多种可能性嘛。比如说11 22 33 44,或者44 33 22 11,或者44 11 22 33等等,但是你把顺序打的太乱就挺反人类了,你让人家怎么记嘛。所以一般我们采取第一种或第二种存放方式,这两种方式也有他们独特的叫法——大小端字节序存储
大端存储是指低字节数据存放在高地址,高字节数据放在低地址,小端存储则是指低字节数据放在低地址,高字节数据放在高地址。如图所示

了解了基本概念后我们来看一道百度面试题

这题的话我们可以初始化变量为1,然后去判断先存放的是1还是0,是1则为小端存储,反之为大端存储。代码如下

当然我们也可以分装成一个函数来写
今天就先到这吧,好困啊
边栏推荐
- WPS MathType installation error 53
- leetcode-415.字符串相加
- 架构训练营模块一作业
- File preview (access local resources through URL)
- Leetcode-188. the best time to buy and sell stocks IV
- BOM&DOM
- 认识以及安装redis
- leetcode-312.戳气球
- Druid source code read some counters in 10 druiddatasource
- Source insight - create new projects and solve Chinese garbled code
猜你喜欢

Modify oracle19c to monitor IP and restart under Linux centos7 environment

Introduction to BIST (build_in selftest)

我的Redis整理

The remote warehouse is pulled successfully, and the folder of the local warehouse still displays a red exclamation point

Construction training camp module I operation

leetcode-241.为运算表达式设计优先级

WPS MathType installation error 53

APB protocol details vs. 3.0-4.0-5.0

Druid源码阅读2-DruidDataSource的init过程

leetcode-53. 最大子数组和
随机推荐
代码随想录笔记_链表_206反转链表
Druid source code reading 8-druiddatasource removeabandoned mechanism
常用工具和资源
pycharm汉化之后切换回英文
Construction training camp module I operation
epoll用例详解
ImageView 实现缩放,平移,Fling
Druid源码阅读7-DruidDataSource的recycle过程
BOM浏览器对象模型
The remote warehouse is pulled successfully, and the folder of the local warehouse still displays a red exclamation point
leetcode-494.目标和
VSCode 环境配置管理
Jupyter import Package Failed
Druid源码阅读9-DruidDataSource和DruidConnection中的状态
leetcode-326. 3的幂
Emotional tendency calculation based on Baidu AI Cloud platform
VCs command (continuous update)
leetcode-買賣股票的最佳時機含手續費
[reprint] CentOS 7 install MySQL + MySQL common commands + docker run MySQL
DOM—节点操作(一)

