C++ 什么是(值<;<;32)>&燃气轮机;32是什么意思?

C++ 什么是(值<;<;32)>&燃气轮机;32是什么意思?,c++,C++,我面临的代码对我来说是一个非常特殊的操作,比如: return std::pair<T1, T2>(value >> 32, ( (value << 32) >> 32) ); 返回std::pair(值>>32,((值>32)); 这意味着什么:((值>32) 这是否与值相同(对于我来说,值类型的大小为64位是合理的) 这是否与值相同 没有 由于零被移入(值>32),因此丢弃前32位 (值>32)是最下面的32位 值>>32是前32位 [假设

我面临的代码对我来说是一个非常特殊的操作,比如:

return std::pair<T1, T2>(value >> 32, ( (value << 32) >> 32) );
返回std::pair(值>>32,((值>32));
这意味着什么:
((值>32)

这是否与值相同(对于我来说,值类型的大小为64位是合理的)

这是否与值相同

没有

由于零被移入(值>32),因此丢弃前32位

(值>32)
是最下面的32位

值>>32
是前32位


[假设您从64位类型开始。如果您有32位类型,则这是未定义的行为]

这段代码似乎试图将64位数字拆分为高32位字和低32位字

如果我们假设
为无符号64位整数,则:

value >> 32
是最高有效的32位字(当高位字移到低位字位置时,底部32位从末尾溢出)。并且:


value
的类型为64位整数时,
(value>32)
将返回其中最右边的32位

返回std::pair(value>>32,(value>32));
实际上将64位整数拆分为两个32位部分;)

是按位操作数

它们将数字的位向右移动
>
,或向左移动
32=前32位。
(值>32=底部32位。

如果您的值(如您所说)长度为64位,则此表达式将剪切
,以便用0填充最左边的32位:

假设
为:
0xA3B252A2ADEACA0

那么
值32
是: 0x00000000ADEACA0


std::pair
的第一部分是
value该代码可能旨在将一个无符号64位整数(uint64_t)拆分为两部分:

低位分量(位0..31)

和高位分量(位32..63)

val>>32,将获得v的高分量

和(val>32)将获得v的低分量

val:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYY

val>>32:00000000000000000000000000 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


val-wow,对模板类型使用位操作?!取决于类型(short、uint、double)它可以有多个输出。此外,还缺少一个括号。这可能是危险的。将整数按其位数进行移位是未定义的。如果它们是32位值,则结果是未定义的。这意味着编写代码的人不理解位掩码,因此编写了一个错误的破解。并且假设
操作符>
未被过度编译tten表示
值的类型,当然。整数按位数移位是未定义的。如果是32位值,则结果是未定义的。如果是32位类型,则是未定义的行为(实际上是我的宠物皮).对于C++11,
值是否用
>
移入零取决于类型和实现。如果是48位类型呢?
(value << 32) >> 32
value & 0xFFFFFFFF
value >> 32 = top 32 bits.
(value << 32) >> 32 = bottom 32 bits.