【C语言】大小端的判断

在文章的开头我首先要介绍一下大小端的概念:

大端模式:

是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;

小端模式:

是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。

若将00000001放入计算机中就有两种方法:

—————————————————————>                    小端

低地址            01       00        00        00           高地址

—————————————————————>                   大端

高地址            00       00        00        01          低地址

但是我们应该怎样判断当前计算机的存储模式呢??

首先用指针法:

<span style="font-size:18px;">#include<stdio.h>
int main()
{
	char c;
	int a=1;
	int *p=&a;
	c = *p;
	if(c==a)
	{
		printf("xiaoduan\n");
	}
	else
	{
		printf("daduan\n");
	}

return 0;	

}</span>

在介绍第二种解法前,我们首先简单介绍一下联合体的概念:

计算机科学中,联合体英语union)一种具有多个类型或格式的值,或者把它定义为一种由具有这样的值的变量形成的数据结构。一些编程语言可以支持被称为“联合体”的特殊的资料类型,来表示上述的变量。换句话说,一个联合体的定义(defenition)会指定一些允许的可以存储在实例内的原始数据类型(例如整型,浮点)。和记录(record)(或结构,structure)那些可以被定义去包含一个浮点数或整型不同的是,在一个联合体任何时候只有一个值。

联合体法:

<span style="font-size:18px;">#include<stdio.h>
union UN
{
	int a;
	char c;
}un;
int main()
{
	union UN un;
	un.a=1;
	if(un.c=1)
	{
		printf("xiaoduan\n");
	}
	else
	{
		printf("daduan\n");
	}

return 0;	

}</span>

两个的运行结果都是:

时间: 2024-10-26 13:16:40

【C语言】大小端的判断的相关文章

把一个100以内的自然数分解因数。大小端的判断。

写一个程序,把一个100以内的自然数分解因数.(自然数分解因数就是将一个自然数分解为几个素数的乘积,提示,由于该数不是很大,所以可以将质数保存在数组中,以加快计算速度) 1 #include<stdio.h> 2 #include<math.h> 3 int Count(int n) 4 { 5 int i = 2; 6 for(i = 2;i<=sqrt(n);i++) 7 { 8 if(n%i==0) 9 { 10 printf("%d*",i); 1

大小端的判断

void IsBigEndian(){ short int a = 0x1122;//十六进制,一个数值占4位 char b =  *(char *)&a;  //通过将short(2字节)强制类型转换成char单字节,b指向a的起始字节(低字节) if( b == 0x11)//低字节存的是数据的高字节数据 {  //是大端模式 } else {  //是小端模式 }}

C语言 大小端 字节对齐

参考:http://www.cnblogs.com/graphics/archive/2011/04/22/2010662.html 1. 大端序:数据的高位字节存放在地址的低端,低位字节存放在地址的高端 2. 小端序:数据的高位字节存放在地址的高端,低位字节存放在地址的低端 记忆方式: 大端序是按照数字的书写顺序进行存储的,小端序是颠倒书写顺序进行存储的. 结构体对齐问题:http://www.cnblogs.com/clover-toeic/p/3853132.html

【C语言】大小端判断。

(一)联合体判断大小端 首先大小端是什么? 如果我们判断第一个字节里存放的是不是 数字1,那么就可以确定其存储方式. #include <stdio.h> union DX { int a; char c; }un; int main () { un.a = 1; if(un.c == 1) { printf("小端存储\n"); } else { printf("大端存储\n"); } return 0; } (二)用指针判断大小端 #include

C语言面试篇1:判断数据大小端存储

一.前言 本节,我们将学习C语言库中数据存储方式,并通过编写代码确定当前系统的数据存储方式. 二.简介 1.大端模式 大端模式是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中. 2.小端模式 小端模式是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中. 3.为什么会有大小端之分? 为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit.但是在C语言中除了8bit的char之外,还有

计算机字节的大小端判断

最近在学习微机接口技术和网络编程基础,在这两门学科里都提到计算机字节的大小端判断问题 什么是大小端呢? 如果在连续的两个地址空a,a+1面存入一个占用这两个空间的整数.以十六位数为例 0x0102   如果a里面是01 则说明是大端存储  如果a里面是02则说明是小端存储 c语言代码: #include <stdio.h>union { short num; char num1[sizeof(short)];} un; int main(int argc,char **argv) { un.n

判断大小端的方法(java和c++)

首先我们给出大小端的定义: 小端:较高的有效字节存放在较高的的存储器地址,较低的有效字节存放在较低的存储器地址. 大端:较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址. 将0x12345678写入到以1000h开始的内存中,这里0x12346578中0x12~0x78的地址是从高到低 如果,我们的机器是小端存储的话,结果为: 数据      地址0x78        1000H0x56        1001H0x34        1002H0x12      

C语言之大小端问题

1:大小端名字的由来及发展 (1)在乔纳森·斯威夫特的著名讽刺小说<格列夫游记>中,小人国内部分裂成Big-endian和Little-endian两派,区别在于一派要求从鸡蛋的大头把鸡蛋打破,另一派要求从鸡蛋的小头把鸡蛋打破.斯威夫特借以讽刺英国的政党之争,在计算机工业中指数据储存顺序的分歧. (2)后来计算机通信发展起来后,遇到一个问题就是:在串口等串行通信中,一次只能发送1个字节.这时候我要发送一个int类型的数就遇到一个问题.int类型有4个字节,我是按照:byte0 byte1 by

CPU的大小端及如果判断

不同体系结构的CPU,数据在内存中存放的排列顺序是不一样的. 存储器中对数据的存储是以字节(Byte)为基本单位的,因此,字(Word)和半字(Half-Word)在存储器中就有两种次序,分别称为:大端模式(Big Endian)和小端模式(Little Endian). 大端存储模式是指字或半字的最高字节(Most Significant Bit,MSB)存放在内存的最低位字节地址上,而字数据的低字节则存放在高地址中.打个比方,有一个字为0×12345678,这个字由4个字节组成, 从高位到低