判断大小端问题

简介: 判断大小端问题

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

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


什么是大端小端:

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

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


为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为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;
}


相关文章
|
4月前
|
存储 C语言
C语言第六十弹----设计函数判断系统大小端字节序
C语言第六十弹----设计函数判断系统大小端字节序
|
3月前
|
存储 网络协议 API
大端与小端概念、多字节之间与单字节多部分的大小端转换详解
大端与小端概念、多字节之间与单字节多部分的大小端转换详解
63 1
|
6月前
|
C语言
C语言之将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。
C语言之将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。
154 0
|
7月前
|
存储
大端法与小段法的区别
大端法与小段法的区别
96 0
|
9月前
|
存储 编译器 C语言
【C语言】大小端介绍以及判断大小端的两种方式
【C语言】大小端介绍以及判断大小端的两种方式
199 0
|
11月前
|
编译器 C语言
「题解」关于sizeof陷阱,无符号整形,变种水仙花数
x是有符号数-1,内存中是全1,当有符号的x和无符号数进行比较时,x会隐式类型转换被当做无符号数,是一个很大的数,输出结果是x is greater 至于这个很大的数是偶少呢
|
C语言
【C】替换空格,宏实现整数的二进制奇偶位交换
【C】替换空格,宏实现整数的二进制奇偶位交换
55 0
【C】替换空格,宏实现整数的二进制奇偶位交换
【每日一题Day41】生成交替二进制字符串的最小操作数 | 模拟 位运算
思路:长度一定的交替二进制字符串有两种可能性,以字符0开头的0101字符串和以字符1开头的1010字符串,因此只需要将字符串s与这两种字符串进行比较,记录不相同的字符个数,最后返回较小值即可
62 0
【每日一题Day41】生成交替二进制字符串的最小操作数 | 模拟 位运算
|
编译器
23位与64位区别/指针类型作用/野指针/指针运算/二级指针
23位与64位区别/指针类型作用/野指针/指针运算/二级指针
144 0
23位与64位区别/指针类型作用/野指针/指针运算/二级指针