Ale*_*der 4 c++ bit-shift language-lawyer c++11 c++14
如果计数大于类型的宽度,如右移未定义行为中所讨论的那样?如果位移数超过有效操作数大小,则移位值是不确定的.
因此,在下面,值bar
是未定义的:
uint32_t foo = 123;
uint32_t bar = (foo >> 33);
Run Code Online (Sandbox Code Playgroud)
这种轮班操作是否定义明确std::bitset
?如:
std::bitset<32> foo(123);
std::bitset<32> bar(foo >> 33);
Run Code Online (Sandbox Code Playgroud)
我可以在哪个官方文件中找到这样的信息?
该案例未在cppreference上明确说明(https://en.cppreference.com/w/cpp/utility/bitset/operator_ltltgtgt).
结果由标准定义为0,[bitset.members]/9:
bitset&operator >> =(size_t pos)noexcept;
9效果:将*中的位置I处的每个位替换为如下确定的值:
(9.1)如果pos> = N - I,则新值为零;
(9.2)如果pos <N - I,则新值是位置I + pos处的位的先前值.
归档时间: |
|
查看次数: |
110 次 |
最近记录: |