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++知识库 -> Chapter02-信息的存储-上 -> 正文阅读

[C++知识库]Chapter02-信息的存储-上

1.信息的存储

  • 通常情况下,程序将内存视为一个非常大的数组。数组的元素是由一个个的字节组成,每个字节都由一个唯一的数字来表示,称之为地址。这些所有地址的集合称为虚拟地址空间。

信息的存储.jpg

2.字节

  • 1个字节是由8个位组成,在二进制中,每一位的值可能有0或者1两种状态。当这8个位全为0时,表示一个字节的最小值;当这8个位全为1时,表示最大值;如果用十进制来表示,那么一个字节的取值范围就在[0,255]之间。上面这种按照一位一位表示数据的方式称为位模式

位模式.jpg

3.十六进制表示位模式

  • 在C语言中,十六进制数是以0X或0x开头。字母部分可以是全部大写或全部小写或者大小写混合。

十六进制、二进制、十进制.jpg

  • 二进制与十六进制之间的转换:将二进制数从右向左,每四位为一组来转换成相应的十六进制数。如果总位数不是4的倍数,那么最左边的一组会出现小于4位的情况,这时将前面进行补0。接着,将每4位为一组的二进制数进行一一转换即可得到十六进制数。

二进制与十六进制转换.jpg

  • 如何将形如2的n次方的数快速转换为二进制数?
2^0 = 1          0个0
2^1 = 10         1个0
2^2 = 100        2个0
2^3 = 1000       3个0
2^4 = 10000      4个0
2^5 = 100000     5个0
....
2^n = 1000...000 n个0

n = i + 4j:n除以4,j是商、i是余数,i的可能取值是0、1、2、3,因此与之对应的十六进制数是1、2、4、8

例如2^13, n = 13 = 1 + 4 * 3,因此2^13 = 0x2000
  • 十进制与十六进制之间的转换:使用辗转相除法,每次使用得到的商来除以16,直到得到的商不能被16整除为止。将得到的余数用16进制来表示,然后自下而上书写即可得到十六进制表示。

十进制转换成十六进制数.jpg

4.字长Words

  • 字长决定了虚拟地址空间最大值可以到多少,对于32位机器,虚拟地址空间最大为4GB;64位机器,虚拟地址空间最大为16EB。

字长.jpg

  • 大多数64位的机器做了向下兼容,因此32位机器编译的程序也可以运行在64位机器上。在64位机器上,可以通过命令gcc -m32 -o hello32 hello.c编译生成可以在32位机器上运行的程序。通过修改编译选项gcc -m64 -o hello64 hello.c,就可以编译生成在64位机器上运行的程序。

不同类型数据占用不同字节空间.jpg

5.地址和字节序

  • 一个int类型的变量x=0x01234567,假设地址位于0x100处。由于int类型占4个字节,因此x被存储在地址为0x100~0x103的内存处。

大端模式与小端模式.jpg

  • 大端模式:最高有效字节存储在最前面即低地址处。IBM和Sun公司的机器大多采用大端法。
  • 小端模式:最低有效字节存储在最前面即低地址处。大多数intel兼容机采用小端模式。
#include <stdio.h>

typedef unsigned char* byte_pointer;

void show_bytes(byte_pointer start, int len) {
    int i;
    for(i = 0; i < len; i++) {
        printf("%.2x", start[i]);
    }
    printf("\n");
}

void show_int(int x) {
    show_bytes((byte_pointer) &x, sizeof(x));
}

6.参考资料

[1].本文图片来源,侵权必删:https://www.bilibili.com/video/BV1cD4y1D7uR?p=5

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

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