C进阶_C语言_大小端_C语言大小端

news2024/9/22 11:24:07

现在调试以下代码,并对变量a和b进行监视:

#include <stdio.h>
int main()
{
	int a = 20;
	int b = -10;
	return 0;
}

右键,勾选十六进制显示:

可以看到,变量a和变量b的十六进制值分别为0x00000014和0xfffffff6。

那么,我们不妨去看看它们在内存中是怎么存储的

定义两个指针变量分别指向a、b的地址,然后在内存窗口中分别输入这两个指针变量:

#include <stdio.h>
int main()
{
	int a = 20;
	int b = -10;
	int* pa = &a;
	int* pb = &b;
	return 0;
}

可以看到,它们的值是反着存储的。

a的值的十六进制形式为0x00000014,但是在内存中是以14 00 00 00存储的;

b的值的十六进制形式为0xfffffff6,但是在内存中是以f6 ff ff ff存储的。

这就涉及到大小端的问题了。

什么是大端和小端?

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

为什么有大端和小端?

这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。
例如:一个 16bit 的 short 型 x ,在内存中的地址为 0x0010 , x 的值为 0x1122 ,那么 0x11 为高字节, 0x22 为低字节。对于大端模式,就将 0x11 放在低地址中,即 0x0010 中, 0x22 放在高地址中,即 0x0011 中。小端模式,刚好相反。我们常用的 X86 结构是小端模式,而 KEIL C51 则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。
 

这方面了解即可。

我们以十六进制数0x11223344为例,加深对大小端的理解。

上文提到过

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

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

如果以大端模式、小端模式分别存储,那它在内存中就是这样存储的:

下边看一道题:

请简述大端字节序和小端字节序的概念,设计一个小程序来判断当前机器的字节序。(10分)

可以这样实现:

#include <stdio.h>
int check_sys()
{
	int i = 1;
	return (*(char*)&i);
}
int main()
{
	int ret = check_sys();
	if (ret == 1)
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}
	return 0;
}
//代码2
int check_sys()
{
	union
	{
		int i;
		char c;
	}un;
	un.i = 1;
	return un.c;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/138421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL之数据库设计范式

数据库设计范式&#xff1a; 第一范式&#xff1a; 要求任何一张表必须有主键&#xff0c;每一个字段原子性不可再分&#xff0c;第一范式是最核心&#xff0c;最重要的范式&#xff0c;所有的表的设计都需要满足 举例&#xff1a; 第二范式&#xff1a; 建立在第一范式的基…

一款基于SSH的反向Shell工具

一款基于SSH的反向Shell工具。 Reverse_SSH上一款基于SSH的反向Shell工具&#xff0c;在该工具的帮助下&#xff0c;广大研究人员可以使用SSH来实现反向Shell&#xff0c;并同时拥有下列功能&#xff1a; 1、使用原生SSH语句管理和连接反向Shell&#xff1b; 2、动态、本地和…

<UDP网络编程>——《计算机网络》

目录 1. 网络基础知识 1.1 理解源IP地址和目的IP地址 1.2 认识端口号 1.3 理解 "端口号" 和 "进程ID" 1.3.1 理解源端口号和目的端口号 1.4 认识TCP协议 1.5 认识UDP协议 1.6 网络字节序 2. socket编程接口 2.1 socket 常见API 2.2 sockaddr结构 2.3 socka…

广告刷屏世界杯,联想Filez助力海信全球营销运营

相信每个世界杯球迷在看球的同时也被世界杯球场上不断滚动的“Hisense&#xff0c;世界第二&#xff0c;中国第一”的广告牌吸引目光。在这28天&#xff0c;64场比赛中&#xff0c;卡塔尔的比赛场地不仅随处可见海信的围栏广告&#xff0c;同时场外也随处可见海信的身影。从备受…

ARM寄存器

1.ARM 工作状态 arm 支持大小端&#xff08;默认小端 &#xff0c;大端格式&#xff1a;高字节在低地址&#xff0c;低字节在高地址&#xff1b;小端格式&#xff1a;高字节在高地址&#xff0c;低字节在低地址&#xff1b;&#xff09;、arm支持16bit thumb指令和32bit arm指…

景联文科技:探究人工智能在智慧医疗中的应用及作用|数据标注

智慧医疗中的人工智能具有难以想象的潜力。人工智能在智慧医疗中的未来从通过协助重复性工作到药物管理或药物创造的治疗计划设计开始&#xff0c;人工智能已经在多个医学领域发挥作用。更好地组织智慧医疗物流智慧医疗和医学领域的人工智能可以更好地组织患者路线或治疗计划&a…

RabbitMQ 队列参数

RabbitMQ 队列参数 RabbitMQ在申明队列的时候&#xff0c;可以指定一些参数&#xff1a; /*** Declare a queue* see com.rabbitmq.client.AMQP.Queue.Declare* see com.rabbitmq.client.AMQP.Queue.DeclareOk* param queue the name of the queue* param durable true if we…

内核源码解读之内存管理(10)percpu_page_set分析

文章目录背景数据结构pcp的初始化流程背景 Linux系统中0阶内存分配需求是最多的&#xff0c; 而且经常存在频繁分配释放的行为&#xff0c;如果每次都去伙伴系统中申请&#xff0c;会经常需要获取zone->lock锁住整个zone区域。随着CPU核心数的增加&#xff0c;伙伴系统锁竞…

jumpserver堡垒机配置https访问

官方文档&#xff1a;https://docs.jumpserver.org/zh/master/ Jumpserver部署关闭防火墙开放策略 按照需要开放端口即可 firewall-cmd --permanent --add-port22/tcp 开放22端口 firewall-cmd --permanent --add-port80/tcp 开放80端口 firewall-cmd --permanent --add-po…

ctfshow-信息搜集

web1 右键查看源码得到flag web2 禁用了右键&#xff0c;可以ctrlu查看源码得到flag web3 抓包得到flag web4 题目提示在robots中&#xff0c;可以用dirsearch 扫出来 访问robots.txt 再访问/flagishere.txt得到flag web5 题目提示源码泄露&#xff0c;再用dirsearch扫…

如何在Linux上安装文件同步工具:FreeFileSync

文件同步是最需要的功能之一&#xff0c;尤其是在共享文件时&#xff0c;不仅如此&#xff0c;它还可以很好地用于将数据与云存储同步。因此&#xff0c;如果您正在寻找一种可免费获得且易于在 Linux 上使用的工具&#xff0c;请不要错过本文。 在 Linux Mint 21 上安装 FreeF…

【数据结构】(牛客)链表中倒数第k个结点,(LeetCode)合并两个有序链表,(牛客)CM11 链表分割

目录 一、链表中倒数第k个结点 1、题目说明 2、题目解析 二、合并两个有序链表 1、题目说明 2、题目解析 三、CM11 链表分割 1、题目说明 2、题目解析 一、链表中倒数第k个结点 1、题目说明 题目链接&#xff1a;链表中倒数第k个结点 输入一个链表&#xff0c;输出该链表中倒…

U3D客户端框架(资源管理篇)之自动化打Assetbundle包管理器

一、AssetBundle介绍 AssetBundle是将资源使用Unity提供的一种用于存储资源的压缩格式打包后的集合&#xff0c;它可以存储任何一种Unity可以识别的资源&#xff0c;如模型&#xff0c;纹理图&#xff0c;音频&#xff0c;场景等资源。也可以加载开发者自定义的二进制文件。他…

CleanMyMacX4.12最新免费版苹果电脑系统优化清理软件

CleanMyMac X是一款Mac上优秀的系统清理工具&#xff0c;它可以帮助用户清理垃圾文件、清理缓存、清理日志文件、清理应用程序等&#xff0c;可以让Mac系统保持良好的运行状态&#xff0c;提高Mac的运行速度。CleanMyMac X还可以帮助用户清理垃圾文件、清理缓存、清理日志文件、…

PCB翘曲度标准是多少

PCB翘曲其实也是指电路板弯曲&#xff0c;是指原本平整的电路板&#xff0c;放置桌面时两端或中间出现在微微往上翘起&#xff0c;这种现象被业内人士称为PCB翘曲。 电路板翘曲度计算公式将电路板平放在桌面上&#xff0c;电路板的四个角着地&#xff0c;测量中间拱起的高度&am…

乐观的调优(插入排序希尔排序)

学习目标 写在前面 1.插入排序 2.插入排序实战 3.插入排序的实现 4.插入排序的效率 5.平均情况 6.希尔排序 7.希尔排序的实现 8.希尔排序的效率 9.总结 写在前面 之前我们衡量一个算法的效率时&#xff0c;都是着眼于它在最坏情况下需要多少步。原因很简单&#x…

PyQt6快速入门-开发环境搭建

PyQt6开发环境搭建 文章目录 PyQt6开发环境搭建1、软件安装2 、创建工程2.1 创建Qt工程2.2 创建Python工程2.3 PyQt6启动失败问题解决本文将介绍如何在Windows下创建PyQt6的开发环境。 1、软件安装 第一步,下载并安装Python环境 https://www.python.org/downloads/windows/或…

effective C++读书笔记3

目录 在资源管理中小心copy行为 在资源管理中提供对原始资源的访问 以独立语句将newed对象置入智能指针 这是effectiveC中第三章内容&#xff1a;资源管理 在资源管理中小心copy行为 不是所有资源都是heap-based&#xff0c;对那种资源而言&#xff0c;像auto_ptr和 tr1 :…

【C语言进阶】数据在内存的存储

作者:匿名者Unit 目录一.数据类型分类1.整形2.浮点型3.构造类型4.指针类型5.空类型二.整形的存储1.原、反、补码2.大小端存储三.浮点数的存储一.数据类型分类 根据不同的数据类型&#xff0c;在内存中的人存储方法也有所差异&#xff0c;所以我们先来介绍一下数据类型的分类。…

(二)uboot移植--从零开始自制linux掌上电脑(F1C200S)<嵌入式项目>

目录 一、前言 二、F1C200s上电启动顺序 三、前期准备 四、新建用户 五、交叉编译环境配置 六、uboot简介 七、uboot移植 &#x1f34f; uboot下载 &#x1f34f; uboot默认配置 &#x1f34f; uboot图形界面配置 &#x1f34f; uboot编译 &#x1f34f; 烧录bin…