前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C 语言中负数移位运算讲解

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

作者头像
全栈程序员站长
发布2022-09-14 09:49:50
2.3K0
发布2022-09-14 09:49:50
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

C 语言中负数移位运算讲解 “<<”、“>>”为移位运算符。 “<<”为左移位运算符,即数据字节中的每个二进制位同时 向左移位。如“x<<n”表示 x 中的每个二进制位同时向左移动 n 位。 “>>”为右移位运算 符,即数据字节中的每个二进制位同时向右移位。如“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”表示。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/159275.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档