sách gpt4 ai đã đi

C++ union 内部

In lại 作者:行者123 更新时间:2023-11-30 00:39:47 32 4
mua khóa gpt4 Nike

我正在努力学习更多有关 C++ 的知识,但在国际象棋程序中遇到了一些代码,需要帮助才能理解。我有一个 union ,例如:

union b_union {

Bitboard b;
struct {
#if defined (BIGENDIAN)
uint32_t h;
uint32_t l;
#else
uint32_t l;
uint32_t h;
#kết thúc nếu
} dw;
};

以上代码属于else条件。

位板定义为 uint64_t。如果我有一个值,比如 0x0025f780,即 282578800148862,我设置 union.b = 0x0025f780,则 union.dw.l 更新为 16843134,union.dw.h 更新为 65793。最初 l 和 h 以3435973836. 在内部,发生了什么?我是 C++ 的新手。只是想了解 union 内部的工作方式。

非常感谢任何见解。

大卫

1 Câu trả lời

union 意味着组件将占用相同的内存位置。在您展示的代码示例中,目的是允许您直接引用 b 的高 32 位和低 32 位。

请注意,此代码调用未定义(或实现定义)的行为。这是因为您正在从写入数据的不同元素访问 union 元素。

因此 b 是一个 64 位整数,将与 lh 共享相同的内存位置,它们指的是较低和高 32 位。当然,它的有效性取决于机器的字节序——这就是为什么有预处理器 if-else 的原因。

编辑:您的特定示例也不正确。但这是一个固定版本:

当您设置 b = 282578800148862 giờ,(b = 0x101010101017e)。高低32位分别是:

00010101 0101017e

Vì thế

l = 0x0101017e = 16843134
h = 0x00010101 = 65793

关于C++ union 内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7971967/

32 4 0
Bài viết được đề xuất: c++ - 字符串中子序列的长度
Bài viết được đề xuất: mysql - 语句在 SQL 中有效,但在 PDO 中无效
Bài viết được đề xuất: PHP 搜索 2 个表以显示列表
Bài viết được đề xuất: php - 我正在尝试使用 PHP 制作编辑表单
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com