gpt4 book ai didi

c++ - 反转数字的位

转载 作者:太空宇宙 更新时间:2023-11-04 14:48:06 24 4
gpt4 key购买 nike

这是一个 C++ 类,用于引用 LeetCode 讨论中的位。 https://leetcode.com/discuss/29324/c-solution-9ms-without-loop-without-calculation例如,给定输入 43261596(以二进制表示为 00000010100101000001111010011100),返回 964176192(以二进制表示为 00111001011110000010100101000000)。

谁能解释一下?非常感谢!!

class Solution {
public:
uint32_t reverseBits(uint32_t n) {
struct bs
{
unsigned int _00:1; unsigned int _01:1; unsigned int _02:1; unsigned int _03:1;
unsigned int _04:1; unsigned int _05:1; unsigned int _06:1; unsigned int _07:1;
unsigned int _08:1; unsigned int _09:1; unsigned int _10:1; unsigned int _11:1;
unsigned int _12:1; unsigned int _13:1; unsigned int _14:1; unsigned int _15:1;
unsigned int _16:1; unsigned int _17:1; unsigned int _18:1; unsigned int _19:1;
unsigned int _20:1; unsigned int _21:1; unsigned int _22:1; unsigned int _23:1;
unsigned int _24:1; unsigned int _25:1; unsigned int _26:1; unsigned int _27:1;
unsigned int _28:1; unsigned int _29:1; unsigned int _30:1; unsigned int _31:1;
} *b = (bs*)&n,
c =
{
b->_31, b->_30, b->_29, b->_28
, b->_27, b->_26, b->_25, b->_24
, b->_23, b->_22, b->_21, b->_20
, b->_19, b->_18, b->_17, b->_16
, b->_15, b->_14, b->_13, b->_12
, b->_11, b->_10, b->_09, b->_08
, b->_07, b->_06, b->_05, b->_04
, b->_03, b->_02, b->_01, b->_00
};

return *(unsigned int *)&c;
}
};

最佳答案

转换 视为在内存上提供不同的布局模板。

使用此模板 图片,代码是无符号 整数内存位置上的 32 位模板布局。

因此,它不是将内存视为 uint32_t,而是将内存视为 32 位。

创建指向 32 位结构的指针。

指针分配给与 uint32_t 变量相同的内存位置。

指针将允许对内存位置进行不同的处理。

创建了一个 32 位的临时变量(使用结构)。该变量使用初始化列表进行初始化。
初始化列表中的位字段来自原始变量,倒序排列。

因此,在列表中:

  new bit 0 <-- old bit 31  
new bit 1 <-- old bit 30

这种方法的基础依赖于初始化列表。作者让编译器反转这些位。

关于c++ - 反转数字的位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30812967/

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