我面对的代码对我来说有一个非常类似的操作:
return std::pair<T1, T2>(value >> 32, ( (value << 32) >> 32) );
Run Code Online (Sandbox Code Playgroud)
这是什么意思:( (value << 32) >> 32).
这和刚刚一样value吗?(对我来说,当值类型的大小是64位时是合理的)
这和刚刚一样
value吗?
没有.
因为零被移入(值<< 32)>> 32)所以丢弃前32位.
(value << 32) >> 32) 是最低32位
value >> 32 是前32位
[假设您从64位类型开始.如果你有32位类型,那么它是未定义的行为]
该代码可能旨在将无符号 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 是有符号整数,您可能无法得到预期的答案。
| 归档时间: |
|
| 查看次数: |
1321 次 |
| 最近记录: |