对位转移行为的怀疑
Doubts on bit-shifting behavior
我想清除一些位移动的疑问:
-
使用
unsigned int
:unsigned int i = 500;
i << 24;
据我所知,这会导致
unsigned int
溢出,这是否完全可以吗?
c 17(8.5.7/2( - e1&lt;&lt;E2是E1左移E2位位置;空缺 钻头充满零。如果E1具有未签名类型,则 结果是E1×2^e2,比最大值还要降低一个比最大值多。 在结果类型中表示。
-
只要我的移动少于32位',就可以在
signed int
上使用右移,因为" int"在我的平台上是32位。int i = 500;
i >> 31;
是溢出吗?
C 17(8.5.7/3(E1>> E2的值是E1右移动E2位位置。如果E1有 未签名类型,或者E1具有签名类型和非负值, 结果的价值是商的组成部分 e1/2^e2。
-
这很好吗?
是。
i
将成为4093640704
,在十六进制的0xf4000000
中。 -
是溢出吗?
否。这是一个正确的偏移(类似于分区的操作(,因此
i
将变为零。
请注意,有关班次的规则很可能会改变。当前,有几种情况是未定义的行为或实施定义。由于下一个标准将需要两个的补充算术,因此有关转移的规则将放松:唯一的不确定行为是,如果移位量大于或等于类型的宽度。这是当前的草案规则:链接。
相关文章:
- 我是否需要在下一次转移时将所有权*转移回转移队列
- 如何将元素从向量转移到新数组?
- 为什么系统函数总是在C++中返回已转移的退出状态?
- C++:将 UDP 袜子转移到新位置
- 为什么最后一个推回向量的对象的字段会转移到向量的其他对象?
- 使用指针向量(带代码)C++(以及对其使用的便利性的怀疑)时出现问题
- 如何在MPI中将矩阵从一个进程转移到另一个进程
- Qt将鼠标移动事件转移到新窗口
- 将进程的执行从线程1转移到线程2
- 如何在SOCI中注册数据库故障转移回调?
- 这个C++结构如何从函数转移到"你的"成员
- 如果A("whole")有一组B("parts"),如何同步"part" B从A "whole"到另一个A的转移?
- 将 ulong 从 c++ 转移到 c#
- C++将SDL_renderer转移到班级
- 将矩阵转移到阵列中
- 从Turbo转移到Code :: Blocks
- 如何将枯竭的健康转移到下一个循环中
- OPENCL-如何使辅助功能返回阵列并将内存的部分从恒定内存空间转移到私有
- 如何将所有权从一个共享指针向量转移到另一个向量?
- 对位转移行为的怀疑