首页 > 其他分享 >C语言大端存储和小端存储到底有什么区别? 结尾详细题目加深理解

C语言大端存储和小端存储到底有什么区别? 结尾详细题目加深理解

时间:2024-07-11 20:31:08浏览次数:12  
标签:小端 存储 字节 模式 C语言 sizeof 内存地址

一.为什么有大端小端模式?

        大端模式(Big-endian)和小端模式(Little-endian)是计算机科学中数据存储的一种方式,它们指的是多字节数据类型(如整数、浮点数等)在内存中的字节序(byte order)。这两种模式的主要区别在于数据的最高有效字节(MSB)和最低有效字节(LSB)的存储位置。

二.什么是大端模式和小端模式?

        大端(存储)模式:是指数据的低位存储在内存的高位置中,数据的高位存储在内存的低位置中。

        小端(存储)模式:是指数据的高位存储在内存的高位置中,数据的低位存储在内存的低位置中。

大部分计算机都是小端模式。为方便记忆----小端模式低对低,高对高,而大端模式则是相反。

2.1小端模式是怎么样存储的?

例如二进制为1100 1010 1011 1011,左边是数据的高位置,右边是低位。下面就是小端存储的方式,图解。

例如:存放十六进制数:7A-FE-1C-B9-35-84,小端模式图解。

2.2大端模式是怎么样存储的?

例如二进制为1001 0001 1100 1010,左边是数据的高位置,右边是低位。下面就是大端存储的方式。高位在低位置,如1001 0001 就放在最右边

例如:存放十六进制数:7A-FE-1C-B9-35-84,大端模式图解

注意:数据的存储是八位为一个单元。(8位=1字节)

sizeof(char)= 1 分配1个内存地址

sizeof(short)= 2 分配2个内存地址

sizeof(int)= 4 分配4个内存地址

sizeof(long)= 8 分配8个内存地址

sizeof(float)= 4 分配4个内存地址

sizeof(double)= 8 分配8个内存地址

sizeof(long double)= 16 分配16个内存地址

三.百度2015年系统工程师笔试题:
 请简述大端字节序和小端字节序的概念,设计一个小程序来判断当前机器的字节序。(10分)

int main()
{
	int a = 1;
	// 注意 :读取数据永远都是从低地址开始
	//此时*p取出的就是第一个字节里的数据 ----- 低地址的数据
	char* p = (char*)&a;
	if (*p == 1)
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}
	return 0;
}

标签:小端,存储,字节,模式,C语言,sizeof,内存地址
From: https://blog.csdn.net/2201_75840339/article/details/140333101

相关文章

  • 573、基于51单片机的温度控制(制冷,存储,查询)
    完整资料或定制滴滴我(有偿)见文末。目录一、设计功能二、Proteus仿真三、原理图四、程序源码五、资料包括一、设计功能温度控制阀门制冷1、测量环境温度,如果温度过高,则打开阀门释放冷气2、记录阀门打开时间和打开时长3、具有查询功能二、Proteus仿真三......
  • c语言中,char能参与计算吗?
    在C语言中,char 类型确实可以参与计算,但具体行为取决于上下文和编译器如何处理字符的存储。char 类型在C中通常用于存储单个字符,但实际上它是通过整数(通常是8位,即1字节)来存储的,因此它可以像整数一样参与算术运算。字符的存储ASCII码:在大多数系统中,char 类型的字符通过其AS......
  • c语言(7.11)
    今天学习了if语句#include<stdio.h>intmain(){   /*inta=10;   if(a>5)   {      printf("真的大于5");   }*/      /*doubletemperature=38.5;   if(temperature>38)   {      printf("体温过高,语音报......
  • C语言中,scanf和printf函数,分支和循环
    目录1.printf函数1.占位符2.输出格式a.输出宽度b.总是显⽰正负号c.限制小数位数d.输出部分字符串2.scanf函数1.基本用法2.返回值3.占位符4.赋值忽略符3.if语句elseelseif4.关系操作符5.条件操作符(三目操作符)6.逻辑操作符a.逻辑取反操作符!b.逻辑与运算符&......
  • 基于EF Core存储的国际化服务
    前言.NET官方有一个用来管理国际化资源的扩展包Microsoft.Extensions.Localization,ASP.NETCore也用这个来实现国际化功能。但是这个包的翻译数据是使用resx资源文件来管理的,这就意味着无法动态管理。虽然官方有在文档中提供了一些第三方管理方案,但是都不太方便。其中一个是基于......
  • C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,
    目录C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组】一维数组一维数组的创建数组的七种初始化完全初始化:部分初始化:字符数组的初始化:自动初始化为0:使用`memset`函数初始化:循环初始化:指定初始化器(`c99`,`gcc`)支持:一维数组的使用案例1:统计随机数的分布......
  • Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和
    场景存储过程存储过程是一组为了完成特定功能的SQL语句集合。使用存储过程的目的是将常用或复杂的工作预先用SQL语句写好并用一个指定名称存储起来,这个过程经编译和优化后存储在数据库服务器中,因此称为存储过程。当以后需要数据库提供与己定义好的存储过程的功能相同的服务时,......
  • C语言-常用算法-6
    题目:一个球从100米高度自由下落,每次落地后反弹回原来高度的一半;再落下,那么它在第10次落地时,共经过多少米?第十次反弹多高。源代码:#include<stdio.h>intmain(){doubleheight=100,length_total=100;for(inti=0;i<10;i++){height/=2;......
  • C语言-常用算法-5
    题目:如果一个渔夫从2011年1月1日开始每三天打一次鱼,两天晒一次网,编程实现输入2011年1月日后的任意日期,输入该渔夫是在打鱼还是晒网。源代码:#include<stdio.h>intmain(){intmonth_days[12]={31,28,31,30,31,30,31,31,30,31,30,31};intyear,month,day;......
  • 嵌入式学习——C语言数据结构(三)
    七、赋值运算符    1、+=     加且赋值         C += A;等价于C=C+A    2、-=      减且赋值         C -= A;等价于C=C-A    3、*=      乘且赋值      ......