使用 OR 运算符赋值

Assignment with OR operator

所以我在阅读 Github 中的源代码时遇到了这段代码。

addr2int = ( (uint32_t)paddr[2] ) | ( (uint32_t)paddr[3] << 8 ) | ( (uint32_t)paddr[4] << 16 ) | ( (uint32_t)paddr[5] << 24 )

谁能给我解释一下这里发生了什么?

据我所知这是一个赋值,但我不明白为什么会有 | 个运算符,或者这是否是一个多重赋值。

(uint32_t)paddr[2] ) | ( (uint32_t)paddr[3] << 8 ) | ( (uint32_t)paddr[4] << 16 ) | ( (uint32_t)paddr[5] << 24 )

  1. 基本上是四个整数的按位或(运算符|)。

  2. 其次,考虑这个:(uint32_t)paddr[2]。这里我们告诉编译器将 paddr[2] 中的任何内容转换为 unsigned long int,其中 uint32_tc++11 std。然而 (uint32_t)variable 是一个 C-style 铸造。在现代C++11中,可以写成static_cast<uint32_t>paddr[2]

  3. 第三,variable_x << variable_y是按位左移。通过示例阅读更多相关信息 here