IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言篇-数据在内存中的存储 -> 正文阅读

[C++知识库]C语言篇-数据在内存中的存储

本章学习重点

1. 数据类型详细介绍
2. 整形在内存中的存储:原码、反码、补码
3. 大小端字节序介绍及判断


正文开始!!!

数据类型包括

重点介绍:浮点型、枚举类型、指针类型,其他后期会分章节详细介绍。

浮点数家族:

成员:float、double

注意浮点数不能直接用等号判断相等,需要设置ESP(精度)。

比如判断一个double类型的a变量是否等于0,不能直接a==0。

#include<stdio.h>
#include<math.h>
#define ESP 0.000000000000000001
int main()
{
	double a = 0.0000000001;
	if (fabs(a) < ESP)
	{
		printf("a等于0");
	}
	return 0;
}

?字面值如果输入小数代表的是double类型,如果需要输入float类型的小数,需要在小数后面带上f。

?解决警告方法:将float a = 0.2f。

枚举类型

定义

枚举类型定义用关键字enum标识,形式为:

enum 标识符 
{
      枚举数据表
};

注意:

(1)enum是关键字,标识枚举类型。定义枚举类型必须用enum开头。

(2)枚举数据表中的名字是程序员自己设定,这些名字只是一个符号。但注意命名时要提高程序的可读性。枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。

(3)枚举数据表的值都是整数。第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。也可以人为设定枚举成员的值,从而自定义某个范围内的整数。

(4)可以在定义类型时对枚举常量初始化。

(5)枚举类型可以进行比较。

(6)枚举常量不是字符串,不能用%s方式输出字符串。

(7)枚举型是预处理指令#define的替代

指针类型

这里主要介绍空指针void*

记住以下两点几个

1.void*可以接受任意类型的指针

2.任意类型的指针可以接受void

整形在内存中的存储

我们需要知道的是数据在内存中存的是补码!

我们先要了解以下知识

原码
直接将二进制按照正负数的形式翻译成二进制就可以。
反码
将原码的符号位不变,其他位依次按位取反就可以得到了。
补码

反码+1就得到补码。

如-1这个数

原码:1000 0000 0000 0000 0000 0000 0000 0001

补码:1111 1111 1111 1111 1111 1111 1111 1110

补码:1111 1111 1111 1111 1111 1111 1111 1111

建议记住-1的补码为32个1。
为什么要存补码?

cpu只会进行加法运算(实际进行的是补码相加),不能进行减法运算,而补码可以很好解决这个问题

如1-1可以转化为1+(-1)

1的补码等于原码即为:0000 0000 0000 0000 0000 0000 0000 0001

-1的补码为:? ? ? ? ? ? ? ? ?1111 1111? 1111? 1111? 1111? 1111 1111 1111
相加之后为? ? ? ? ? ? ? ? ? ? ?0000 0000 0000 0000 0000 0000 0000 0000

结果就为0了,这正是补码的神奇之处!!

大小端介绍

大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。

数据的低位字节序:以字节为单位,靠近右边权值越低。

数据的高位字节序:以字节为单位,靠近左边权值越高。

如数据?int?a = 0x11 22 33 44?

44的权值最低,其次是33。这就好比整数1234,1的权值是10的3次方,2的权值是10的2次方。1是高全值位,4是低权重位。

以vs2019做测试,该编译器将高位放在高地址处,低位放在低地址处,即vs2019用的是小端存储。

接下来我们设计一个程序,不通过查看内存的方法判断某个环境使用的数据存储方式(小端还是大端)

#include<stdio.h>
int check_sys()
{
	union
	{
		int i;
		char c;
	}un;
	un.i = 1;
	return un.c;
}
int main()
{
	int a = check_sys();
	if (a == 1)
	{
		printf("小端");
	}
	else
	{
		printf("大端");
	}
	return 0;
}

最后

如果关于本章有什么疑问,欢迎与本人交流。

如果本章出现错误的地方,欢迎指出,本人感激不尽。

如果觉得有收获的话,欢迎点赞和评论,谢谢。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:10:05  更:2022-02-28 15:13:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:20:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码