C 语言中负数移位运算讲解

C 语言中负数移位运算讲解C 语言中负数移位运算讲解 为移位运算符 向左移位 如 x 为右移位运算 符 即数据字节中的每个二进制位同时向右移位 如 xn 表示 x 中的每个二进制位同时 向右移动 n 位 下图演示了一个 2 字节变量左移 3 位的过程 十进制数 555 的二进制表 1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 1 先转换成二进制补码表

C 语言中负数移位运算讲解
“<<”、“>>”为移位运算符。 “<<”为左移位运算符,即数据字节中的每个二进制位同时
向左移位。如“x<>”为右移位运算
符,即数据字节中的每个二进制位同时向右移位。如“x>>n”表示 x 中的每个二进制位同时
向右移动 n 位。
下图演示了一个 2 字节变量左移 3 位的过程:
十进制数-555 的二进制表:
1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 1
先转换成二进制补码表:
1 1 1 1 1 1 0 1 1 1 0 1 0 1 0 0
最左端位保持不变 补码加“1”后状态
再将补码加“1”:
1 1 1 1 1 1 0 1 1 1 0 1 0 1 0 1
下一步向左移 3 位:
1 1 1 0 1 1 1 0 1 0 1 0 1 0 0 0
左端“离开”3 位丢弃 右端“移入”3 位用“0”补齐
最左端一位保持不变
再转换成二进制补码表:
1 0 0 1 0 0 0 1 0 1 0 1 0 1 1 1
补码再加“1”:
到此步结束。
1 0 0 1 0 0 0 1 0 1 0 1 1 0 0 0
补码加“1”后状态
结果转换成十进制数为“- 4440”。
总结:负数左移时,任何情况下“移入”位将用“0”补齐。
“>>”右移位运算可分为两种情况:一种是移入“0”的叫逻辑右移;一种是移入“1”的叫
算术右移。 负数右移用到的是算术右移。
下图演示了一个 2 字节变量右移 3 位的过程:
十进制数-555 的二进制表:
1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 1
先转换成二进制补码表:
1 1 1 1 1 1 0 1 1 1 0 1 0 1 0 0
最左端位保持不变 补码加“1”后状态
再将补码加“1”:
1 1 1 1 1 1 0 1 1 1 0 1 0 1 0 1
下一步向右移 3 位:
1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 0
左端“移入”3 位用“1”补齐 右端“离开”3 位丢弃
最左端一位保持不变
再转换成二进制补码表:
1 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1
补码再加“1”:
到此步结束。
1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0
补码加“1”后状态
结果转换成十进制数为“- 70”。
总结:负数右移时,任何情况下“移入”位将用“1”补齐。
注:二进制表最左端的二进制位表示符号位,“+”用“0”表示,“-”用“1”表示。

编程小号
上一篇 2025-02-18 08:01
下一篇 2025-04-14 23:33

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/140648.html