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++知识库 -> 数据的储存1 -> 正文阅读

[C++知识库]数据的储存1

上一篇文章通过讲解一些简单的数据储存,让大家了解到编译器中debug和release的差距。这篇文章先来进行个总结。

debug一般是程序员写代码时使用的,方便程序员的修改。

release版本基本上用于发行,它用强大的优化极大的提高了代码的执行效率和内存管理。

这篇文章就来聊一下整形 也就是int,char型在计算机内存中的存储方式

#define _CRT_SECURE_NO_WARNINGS 1//取消警告
#include<stdio.h>
int main() {
	int a = -10;
	return 0;
}

按F10进入调试窗口

调试中找到窗口,点击内存,监视变量a在计算机内部的储存

?在地址中输入&a,按enter即可观察到变量a的地址,将右边的列调整为4,借此观察变量a在计算机的储存方式

?数据在计算机内是以二进制的形式存储的,对于整数来说,在计算机存储中有三种表示形式。

分别为之前文章提到的:原码,反码,补码。

这里提供一下之前写的文章:操作符详解

正整数的原码,反码,补码相同。

这里来聊一下负数,计算机内部储存是以补码来及逆行存储的

?这边以a=-10为例,一个int所占计算机为4个字节,也就是32个bit位,这里我先写一下-10的原码,然后再来解释

10000000000000000000000000001010

这段原码的第一位是符号位,当整数为正时,符号位为0,整数为负时,符号位为1。之后可通过计算器算出10的二进制序列

?为1010,所以最后思维为1010

反码就是符号位不变,其他位按位取反也就是11111111111111111111111111110101——反码

反码+1即为补码,所以10的补码为11111111111111111111111111110111

这里可以为大家解释一下在内存中存储的是补码的原因,这里我举个例子

当计算机在计算1-1的时候,cpu是不能进行加法的,所有计算机实际上是在计算1+(-1),用加法模拟减法

这是1的原码00000000000000000000000000000001

这是-1的原码10000000000000000000000000000001

当使用这两个原码相加,计算出来的结果就为10000000000000000000000000000010

换算成十进制就为-2

这是1的补码0000000000000000000000000000001

这是-1的补码11111111111111111111111111111111

两个相加即为00000000000000000000000000000000

换算出来的十进制位就是0?

这里a的二进制位是:00000000000000000000000000001010

但是细心的读者可能已经发现如果这个地址用十六进制表示就应该为0000000a

这不就是把这个十六倒着存

在知道为什么这样存储的原因前,先让读者了解一下大端存储和小端存储。

这里可以假设a的地址位0x11223344,为了方便计算机读取内存中的信息,计算机有了两种存储方式分别为

?

?这里我们需要了解计算机在内存中存储的字节序,当一个变量大于1个字节时,就会分成大端字节序和小端字节序

11 22 33 44 就为大端字节序, 44 33 22 11 就为小端字节序

大端字节序:11 22 33 44中44就是这个十六进制的低位,这里举个例子,十进制中123,3就是低位,1就是高位,假设左边是低地址,右边是高地址。将低位字节序放在高地址中,高位字节序存放在低地址处

小端字节序:高位字节序放在高地址处,低位字节序放在低位处

这里我们也可以看出,我们的a=-10这个变量在我们现在的编译器中是小端存储的

那么这里我们能否通过设计一个小程序来测量计算机是大端存储还是小端存储呢?

这个留着下一篇文章讲解?

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

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