gpt4 book ai didi

c - 这段代码是否真的可以知道系统是小端还是大端?

转载 作者:行者123 更新时间:2023-12-02 08:31:30 25 4
gpt4 key购买 nike

#include<stdio.h>
int main()
{
unsigned int unum = 0x80008001;
short unsigned int *snum = (short unsigned int*)&unum;
printf("%d\n", *snum);
printf("%d\n", *(snum+1));
return 0;
}

输出:

32769
32768

snum指向的是unum的前两个字节,但它的值是unum的后两个字节,指针递增后,value是unum的前两个字节。

所以,这是一个小端系统。但是,我不确定这种方式是否正确了解系统的类型。合适吗?

最佳答案

您的代码会引发未定义的行为,因为您违反了严格的别名规则(C 标准为 §6.5/7,C++ 为 [basic.lval]/10)。该代码通过完全不同类型的左值访问 unum 的存储值。使用 C++ 编译器,上述代码甚至无法编译,因为不相关指针类型之间的隐式转换是被禁止的。

使用charunsigned char 别名访问对象表示中的单个字节,这些类型被排除在严格的别名规则之外。 Here是例子。

关于c - 这段代码是否真的可以知道系统是小端还是大端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26314803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com