与OR运算符分配

时间:2018-04-08 04:55:10

标签: c++ c++11 bitwise-operators logical-operators

所以当我在Github上阅读源代码时,我遇到了这段代码。

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

有人可以向我解释这里发生了什么吗?

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

1 个答案:

答案 0 :(得分:0)

  

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

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

  2. 其次,请考虑一下:(uint32_t)paddr[2]。在这里,我们告诉编译器将paddr[2]内的任何内容转换为unsigned long intuint32_tc++11 std。然而(uint32_t)variable是一个C风格的演员。在现代C ++ 11中,您可以将其编写为static_cast<uint32_t>paddr[2]

  3. 第三,variable_x << variable_y是左移位。请阅读更多相关信息here