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语言数据类型及在内存中的存储

C语言中的数据类型

我们知道C语言中有char,short,int,double等一些内置类型,以及struct,enum,union这样的自定义类型。根据使用情况可以分为,整形,浮点类型,构造类型,指针类型,空类型几类。这是C中最基本的知识。

大小端的概念

首先在计算机系统中,CPU的编址,寻址和访问内存都是以字节为单位的。以一个十六进制数0x12345678为例,它的12是高权值位,78是低权值位。
在这里插入图片描述
一个四个字节的连续空间,假设编址为0xF1,到0先F4,如果12,存储在0xF1处,78存储在0xF4处,就是高权值位存储在低地址,低权值位存储在高地址处。表示机器是大端字节序存储。如果12存储在0xF4处,78存储在0xF1处,就是高权值位存储在高地址,低权值位存储在低地址,表示机器是小端字节序存储。这就是所谓大小端的概念。

整形在内存中的存储

整形数据在内存中以补码的形势存储,二进制数最高位为符号位,规定0表示正,1表示负。将一个整形数据按照正负数表示成二进制的形式就得到了它的原码,将原码的符号位不变,其他位按位取反得到反码,反码加上1得到补码。规定正数的原码反码补码相同。例如定义一个变量 int a = 20; 它的原码就是
0000 0000 0000 0000 0000 0000 0001 0100
定义一个变量 int a = -20:它的原码就是
1000 0000 0000 0000 0000 0000 0001 0100
反码等于原码符号位不变其他位按位取反,反码:
0111 1111 1111 1111 1111 1111 1110 1011
补码等于反码加上1
0111 1111 1111 1111 1111 1111 1110 1100

一个判断大小端的程序

#include<stdio.h>
int CheckModle() {
	int a = 1;
	char* pc = (char*)&a;
	return *pc == 0;
}
int main() {
	int flag = CheckModle();
	if (flag) {
		printf("Big\n");
	}
	else {
		printf("Small\n");
	}
	return 0;
}

浮点数在内存中的存储

单精度浮点数在内存中的存储:
国际标准IEEE 754规定一个二进制浮点数可以表示为:
(-1) ^ S * M * 2 ^ E
在计算机内部存储M时,默认这个数第一位总是1,因此可以舍弃,可以多保存一位有效数字。而存储E时,标准规定,8位的E必须加上中间数127,11位的E必须加上中间数1023。
在这里插入图片描述

具体转化过程举例完成,例如,定义一个单精度浮点数 float f = 12.125;
①首先12.125转化为二级制为 1100.001。
②科学计数法表示为(-1)^ 0 * 1.1100001 * 2^3。
③正数,所以符号位S为0,尾码E为3,阶码M为1.100001舍弃1保留100001
④存储时尾码加上中间数127 实际存储的是130,二进制为1000 0010
⑤在内存中的二进制序列为 0100 0001 0100 0010 0000 0000 0000 0000
在这里插入图片描述
还原数据时规则有所不同,当E为全0时候,有效数字M 不再加上第一位的1,为了表示很小的数。E全为1时,如果有效数字M的值为全0,表示±无穷大的数。

双精度浮点数的存储方法相同,对于64位的双精度浮点数,一个比特位的符号位S,接着11个位的E,以及52位的M。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 07:31:54  更:2021-07-28 07:33:39 
 
开发: 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年4日历 -2024/4/29 5:07:27-

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