什么(值<< 32)>> 32是什么意思?

Var*_*yan 2 c++

我面对的代码对我来说有一个非常类似的操作:

return std::pair<T1, T2>(value >> 32, ( (value << 32) >> 32) );
Run Code Online (Sandbox Code Playgroud)

这是什么意思:( (value << 32) >> 32).

这和刚刚一样value吗?(对我来说,当值类型的大小是64位时是合理的)

Mit*_*eat 5

这和刚刚一样value吗?

没有.

因为零被移入(值<< 32)>> 32)所以丢弃前32位.

(value << 32) >> 32) 是最低32位

value >> 32 是前32位

[假设您从64位类型开始.如果你有32位类型,那么它是未定义的行为]


bua*_*agg 5

该代码可能旨在将无符号 64 位整数 ( uint64_t ) 拆分为两部分:

低位组件(位 0 .. 31 )

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

val >> 32,将得到v的高分量。

(val << 32) >> 32 将得到 v 的低分量。

val: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

val >> 32: 00000000000000000000000000000000 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

val << 32: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 00000000000000000000000000000000

(val<<32)>>32: 0000000000000000000000000000000 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

注意:如果 val 是有符号整数,您可能无法得到预期的答案。