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

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

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

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.net/159275.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 漫步者lollipods如何调节音量_漫步者LolliPods怎么配对双耳-使用教程[通俗易懂]

    不少用户在入手漫步者LolliPods后不知道怎么配对双耳,小编今天为大家带来了漫步者LolliPods的使用教程,感兴趣的朋友不要错过了哦。漫步者LolliPods配对双耳教程方法一一、先随便连接一只耳机,连接以后点击断开连接,把左耳放回充电仓,二、拿出右耳,把充电仓盖上让右耳断开左耳的链接,然后手机搜索能搜到右耳连接,三、这样两个都可以匹配上了,并且使用时随便一只连接都是主耳机方法二第一:拿出…

    2022年4月9日
    725
  • 蓝桥杯集锦05(python3)

    蓝桥杯集锦05(python3)

    2021年4月18日
    186
  • 兄弟连新版Linux视频教程

    兄弟连新版Linux视频教程兄弟连新版Linux视频教程目录:F:\linux\兄弟连新版Linux视频教程├(1)云计算是什么东西集群又是嘛玩意?.mp4├(2)兄弟连新版Linux教程1.1.1Linux系统简介-UNIX发展历史和发行版本.mp4├(3)兄弟连新版Linux教程1.1.2Linux系统简介-Linux发展历史和发行版本.mp4├(4)兄弟连新版Linux教程1.2Linux系统简介-开源软件…

    2022年6月10日
    35
  • 关于SecureCRT及Vim的使用

    关于SecureCRT及Vim的使用听说大部分的搞网络或者被网络搞的同学,每天都会使用SecureCRT在Linux下进行开发、测试等工作。正所谓“工欲善其事,必先利其器”,一个趁手的开发环境对工作效率的提升是不言而喻的。我在这里简单介绍一下个人在日常使用中积累下来的常用设置及操作,希望对不熟悉的朋友能有一点点参考作用,一家之言,欢迎拍砖。【SecureCRT篇】1、 自动登录服务器如果我们需要经常登录固定某

    2022年6月2日
    39
  • 如何获取服务器种子_连接服务器超时代码leaf

    如何获取服务器种子_连接服务器超时代码leaf*{font-family:”微软雅黑”;}body{background:#fff;}input{cursor:pointer;}.ti{margin:0;padding:20px0;line-height:30px;color:#333;}.tia{color:#255359;}#trackertext{display:block;margin:0auto;backgroun…

    2022年9月27日
    5
  • DB2 递归查询_oracle递归查询所有子节点

    DB2 递归查询_oracle递归查询所有子节点以父子节点定义的表数据递归查询:DB2 递归查询WITH temp(id,parentid,level)    AS   ( SELECT id,parentid,0   FROM AMIS_WF_NODE WHERE parentid = ‘4028e48146a3c33d0146a3cd9e860022’  UNION ALL   SELECT b.id,b.pare

    2025年7月12日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号