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)
上一篇 2022年7月14日 下午9:16
下一篇 2022年7月14日 下午9:16


相关推荐

  • LaTeX入门级教程

    LaTeX入门级教程    LaTeX(LATEX,音译“拉泰赫”)是一种基于ΤΕΧ的排版系统,由美国计算机学家莱斯利·兰伯特(LeslieLamport)在20世纪80年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由TeX所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类…

    2022年7月16日
    15
  • pytorch(8)– resnet101 迁移学习记录

    pytorch(8)– resnet101 迁移学习记录一、前言本篇记录使用pytorch官方resnet101实现迁移学习,迁移学习是当前深度学习领域的一系列通用的解决方案,而不是一个具体的算法模型。Pre-training+fine-tuning(预训练+调参)的迁移学习方式是现在深度学习中一个非常流行的迁移学习方式,有以下3步(1)把预训练模型当做特征提取器:TensorFlow或者Pytorch都有ImageNet上预训练好的模型,将最后一层全连接层(原始的是1000个类别或者更多)改成你自己的分类任务的种类进行输出,或…

    2022年10月6日
    5
  • hostapd配置

    hostapd配置我们有个闲置的USB无线适配器(WIFI适配器),而我们的ISP路由器却是有线的。怎样把我们的家庭NAS服务器变成无线访问点(WAP),在不用买额外的WPA盒子的情况下,在Debian或Ubuntu系统下使用无线设备访问到它?你需要使用hostapd作为访问点和认证服务器。它实现了IEEE802.11访问点管理,IEEE802.1X/WPA/WPA2/EAP授权,RADIUS客户端,…

    2022年5月21日
    221
  • python2022.01.13激活码-激活码分享2022.01.25

    (python2022.01.13激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月31日
    71
  • MySQL存储过程(PROCEDURE)(一)「建议收藏」

    MySQL存储过程(PROCEDURE)(一)「建议收藏」一、定义与目的:定义:存储过程是数据库SQL语言层面的代码封装与重用(是数据库中存储复杂程序,以便外部程序调用的一种数据库对象);目的:我们为了完成特定功能的SQL语句集,经编译创建并保存在数

    2022年7月2日
    36
  • Ubuntu 安装 chrome 浏览器

    Ubuntu 安装 chrome 浏览器Ubuntu 安装 chrome 浏览器

    2026年3月19日
    3

发表回复

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

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