我正在尝试理解有符号和无符号类型的按位运算符行为。根据ISO/IEC文档,以下是我的理解。
左移运算符
E1 << E2
的结果是将E1左移E2个位。因为左移而空出来的位将会用0填充。
对于E1作为有符号非负数:如果该值可以被结果类型表示,则
E1 << E2
的结果是E1乘以2的E2次方。Q1:那么对于有符号负数呢?
Q2:在以下情况中,“模减”的意思是什么?“如果E1具有无符号类型,则结果的值为E1× 2E2,对结果类型可表示的最大值进行模运算加一”。
右移运算符
E1 >> E2
的结果是将E1右移E2个位。对于E1作为有符号非负数/无符号数:结果的值是E1除以2的E2次方的整数部分。
Q3:对于有符号负整数,我看到一些书定义空出来的位置将用
1
填充。请详细说明有符号负整数上使用右移运算符的作用。