按移位运算符
偏移运算符将操作数的第一个操作数 (<<) 或右边 (>>) 由位置的数量第二个操作数对象指定。
语法
移位表达式:
附加表达式移位表达式 << 附加表达式 shift 表达式 >> 附加表达式
两个操作数必须是整数值。 这些运算符执行常见的算术转换;该结果的类型为左操作数的类型转换之后。
对于左 shift,将留空的正确位设置为 0。 对于右 shift,将留空的左位加载根据第一个操作数的类型转换之后。 如果该类型是 unsigned,它们设置为 0。 否则,它们填充符号位的副本。 对于不溢出的左移运算符,语句
expr1 << expr2
与相乘等效由 2。expr2 对于右移运算符,
expr1 >> expr2
,如果 expr1 是无符号或具有非负值,并且部门等效由 2expr2 。
移位运算的结果是未定义的,如果第二个操作数是负值,或者,如果正确的操作数大于或等于该提升的左操作数中的位的宽度。
因为置换运算符执行的转换不提供溢出或下溢条件,信息可能丢失,如果移位运算的结果在第一个操作数的类型不能表示在转换后。
unsigned int x, y, z;
x = 0x00AA;
y = 0x5500;
z = ( x << 8 ) + ( y >> 8 );
在此示例中, x 传输左八个位置,并 y 传输八个位置。 传输的值添加,使 0xAA55,并将其分配给 z。
转换负值右侧为一半初始值,舍入滚动。 例如, – 253 (二进制 11111111 00000011) 转换为一个生产 – 127 (二进制 11111111 10000001)。 正 253 转换生产 +126。
权限是保留符号位。 当一个带符号整数转换时,最有效的位保持设置。 当无符号整数转换时,清除最有效的位。