判断大小端问题

简介: 判断大小端问题

在此之前我们在数据的储存中见过了大小端问题,本该在联合体中再将一遍,我在这里补上。

首先我们先认识以下大小端


什么是大端小端:

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

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


为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8 bit。但是在C语言中除了8 bit的char之外,还有16 bit的short型,32 bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。


用函数判断计算机的大小段


上代码:

#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;
}

用联合体来判断计算机的大小段

由于:

联合也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。所以我们可以利用这一特性来解决大小端问题。

上代码:

typedef union {
  int a;
  char b;
}UN;
int main(){
  UN u;
  u.a = 1;
  if(u.b == 1) printf("小端存储\n");
  else printf("大端存储\n");
  return 0;
}


相关文章
|
3月前
|
存储 C语言
C语言第六十弹----设计函数判断系统大小端字节序
C语言第六十弹----设计函数判断系统大小端字节序
|
3月前
|
存储 网络协议 API
大端与小端概念、多字节之间与单字节多部分的大小端转换详解
大端与小端概念、多字节之间与单字节多部分的大小端转换详解
278 1
|
3月前
|
存储 算法
【三种方法】求一个整数存储在内存中二进制中的1的个数附两道课外练习题
【三种方法】求一个整数存储在内存中二进制中的1的个数附两道课外练习题
31 0
|
10月前
|
存储 人工智能 编译器
C语言之(有关%d和%u的有关内容,输出方法)(有符号和无符号在内存中的存储情况)(整形无符号数和有符号数是如何进行计算的,整形无符号数和有符号数在循环中的应用举例)
C语言之(有关%d和%u的有关内容,输出方法)(有符号和无符号在内存中的存储情况)(整形无符号数和有符号数是如何进行计算的,整形无符号数和有符号数在循环中的应用举例)
354 0
|
10月前
|
C语言
C语言之将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。
C语言之将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。
216 0
|
11月前
顺序打印整型数字的每一位
顺序打印整型数字的每一位
38 0
|
存储 编译器 C语言
【C语言】大小端介绍以及判断大小端的两种方式
【C语言】大小端介绍以及判断大小端的两种方式
314 0
【每日一题Day41】生成交替二进制字符串的最小操作数 | 模拟 位运算
思路:长度一定的交替二进制字符串有两种可能性,以字符0开头的0101字符串和以字符1开头的1010字符串,因此只需要将字符串s与这两种字符串进行比较,记录不相同的字符个数,最后返回较小值即可
81 0
【每日一题Day41】生成交替二进制字符串的最小操作数 | 模拟 位运算
|
存储
用补码计算x+y,并判断结果是否溢出问题
浮点数的加减法与是否溢出的判断,是计算机组成原理中的数据存储的一个入门。至于溢出情况,如果01就是正溢出,00,11未溢出,10负溢出。
535 0
用补码计算x+y,并判断结果是否溢出问题