算术位移和逻辑位移(一篇懂)

article/2025/11/7 2:19:01

位运算程序员的基本功,但是不得不说这一块儿确实挺让人头疼的。不过还好,你遇到了我,哈哈...

文章目录

  • 必备知识
  • 算术移位
  • 逻辑移位
  • 用例子说话
  • 总结

必备知识

  • 计算机是以二进制方式来进行运算的,也就是0和1 。所有数据必须转化成0、1代码计算机才能识别。
  • 在计算机系统中,数值,一律采用补码表示和存储。
  • 计算机中的数均放在寄存器中,通常称寄存器的位数为机器字长。
  • 无符号数:既没有符号(+,-)的数,在寄存器中的每一位均可以用来存放数值。
  • 有符号数:带正负号(+,-)的数,需要留出位置存放符号,“0”表示“正”,“1”表示“负”。
  • 因此,在机器字长相同时,无符号和有符号数对应的数值范围是不同的。如机器字长为16位,无符号表示范围0 ~ 65535,有符号-32768 ~ +32767。
  • 正数:

正整数的原码、反码和补码是一样的。
即看到符号位(第一位)是0,就可以照着写出其他两种码。

  • 负数:
  1. 原码转换为反码:符号位不变,数值位分别“按位取反”
  2. 反码转换为原码也是一样:符号位不变,数值位分别“按位取反”
  3. 原码转换为补码:符号位不变,数值位按位取反,末位再加1
  4. 补码转换为原码:符号位不变,数值位按位取反,末位再加1
    即补码的补码等于原码
  5. 求补(变补),即已知[X]补,求[-X]补 。
    符号位和数值位都取反,末位再加1

算术移位

不改变符号位的移位操作
算术是带有符号的数据,所以我们不能直接移动所有的位数,这可能会使得符号不正确。

不同码制机器数算术移位后的空位添补规则

真值码制添补代码
正数原码、反码、补码0
负数原码0
负数补码左移添0
负数补码右移添1
负数反码1

举例说明:
正数:不论是原码反码补码,左移还是右移,添补代码都是0.
负数的补码:左移时低位补0(右边),右移时高位补1(左边).

逻辑移位

无符号数的移位称为逻辑移位
对于逻辑移位,就是不考虑符号位,移位的结果只是数据所有的位数进行移位

规则:
左移时,高位移丢,低位添0;右移时,低位移丢,高位添0。

用例子说话

在这里插入图片描述

Java中整型(int)4个字节,一个字节8位,即32位。
二进制中最高位是符号位, 1 代表负数,0 代表正数。
7:
原码:0000 0000 0000 0000 0000 0000 0000 0111
反码:0000 0000 0000 0000 0000 0000 0000 0111
补码:0000 0000 0000 0000 0000 0000 0000 0111
-7:
原码:1000 0000 0000 0000 0000 0000 0000 0111
反码:1111 1111 1111 1111 1111 1111 1111 1000
补码:1111 1111 1111 1111 1111 1111 1111 1001

算术右移:
7>>2
在这里插入图片描述
-7>>2
在这里插入图片描述

算术左移:
7<<2
在这里插入图片描述
-7<<2
在这里插入图片描述

逻辑右移:
7>>>2
在这里插入图片描述
-7>>>2
在这里插入图片描述

那么问题来了:为什么1<<31答案是负数?
在这里插入图片描述

总结

Java中:
<<算术左移
>>算术右移
>>>逻辑右移

逻辑左移=算数左移,每次移动,右边统一添0。

逻辑右移,不管符号位,左边统一添0.比如一个有符号位的8位二进制数11001101,如果移一位就变01100110.

算数右移,左边添加的数和符号有关。

补充:

  • 二进制的最高位是符号位:0表示正数,1表示负数
  • 0的反码,补码都是0
  • java没有无符号数,换言之,java中的数都是有符号的
  • 在计算机运算的时候,都是补码的方式来运算的.
  • 当我们看运算结果的时候,要看他的原码(重点)。
  • java 中有 7 个位运算(&、|、^、~、>>、<<和 >>>)(以补码运算,转原码看结果)

按位与&:两位全为1,结果为1,否则为0
按位或|:两位有一个为1,结果为1,否则为0
按位异或^:两位一个为0,一个为1,结果为1,否则为0
按位取反~:0->1 ,1->0


http://chatgpt.dhexx.cn/article/BkOrx4Fv.shtml

相关文章

矩阵乘测试显卡算力

由于pytorch和tensorflow不支持int8 int16的gemm&#xff0c;因此只能测试fp32 fp16 bf16等精度的tflops&#xff0c;如果要测试int8 int16精度下的数值&#xff0c;需要编写cublas脚本&#xff0c;目前不会CUDA编程&#xff0c;可参考大佬的脚本&#xff1a; cuBLAS矩阵乘法性…

逻辑运算和位移指令

逻辑运算指令 AND OR NOT XOR TEST 逻辑位移指令 SHL SHR 算术位移指令 SAL SAR 小循环位移指令 ROL ROR 大循环位移指令 RCL RCR AND 逻辑与指令 汇编格式&#xff1a;AND 目的操作数&#xff0c;源操作数 执行操作&#xff1a;&#xff08;目的操作数&#xff09;&…

Java 移位操作符

如有理解错误的地方&#xff0c;希望大家能够指正。 移位操作符在以前的开发中并没有使用过&#xff0c;估计在日常的开发中也很少会用到&#xff0c;所以记录下来&#xff0c;以后需要的时候方便查阅。 基本概念 Java里面的移位操作符总共有以下三种&#xff1a; 左移操作符 …

java移位操作示例

java移位操作示例 public class Shift4JTest {/***移位操作符有>>&#xff08;右移&#xff09;、<<&#xff08;左移&#xff09;、>>>&#xff08;右移&#xff09;* >>是带符号右移&#xff0c;负数高位补1&#xff0c;正数高位补0* <<左…

Java 移位运算详解

个人网站&#xff1a;生命不息 折腾不止 1、左移运算符&#xff1a;<< 先随便定义一个int类型的数int&#xff0c;十进制的value 733183670&#xff0c;转换成二进制在计算机中的表示如下&#xff1a; value << 1&#xff0c;左移1位 左移1位后换算成十进制的…

java移位运算_Java移位运算符 “

详解 首先举一个样例来说明不是循环移位&#xff1a; 假设上面的程序改为 i 3L << 63 程序的结果仍然为 1000000000000000000000000000000000000000000000000000000000000000 那么就说明Java中的移位运算不是循环的。 那对上面的问题又怎么解释呢&#xff1f; 在JLS(Jav…

java中的移位操作详解

移位运算&#xff0c;这是一个陌生又熟悉的操作。陌生是指不易理解且不常用&#xff0c;熟悉是指“别人家的开发工程师”在代码中经常使用这种方式进行高低位的截取、哈希计算、乘除法的运算&#xff0c;今天&#xff0c;让我们一起来揭开移位运算的神秘面纱。 Java提供了两种…

html 右侧滑动条取消,滚动条可以设置取消吗?

网页中的滚动条可以取消&#xff0c;下面我们就来看一下隐藏网页中滚动条的方法&#xff1a; 1、使用以下CSS可以隐藏滚动条&#xff1a;.container::-webkit-scrollbar {display:none} 但是要兼容其他浏览器的话这个就不太好用了&#xff0c;这个适用于Chrome 2、为了兼容其他…

html网页设计滚动条怎么设置,css怎么设置滚动条?

在我们HTML页面中经常会用到滚动条来优化我们的HTML页面&#xff0c;那么我们该如何设置滚动条呢&#xff1f;下面我们来看一下使用css设置滚动条的方法。 一、我们可以使用overflow属性设置是否出现滚动条overflow:scroll /* x y 方向都会*/ 或者 overflow-x:scroll /*只是x方…

element的表格设置及滚动条的设置

element的Table 表格 1.通过使用elementUI中的表格&#xff0c;达到我们需要的效果&#xff0c;其中包括对滚动条的修改&#xff0c;以及文字颜色修改等… 2.先看效果&#xff0c;是可以滚动的 HTML <div class"content_table"><el-table :data"tab…

改变滚动条样式

在我们开发网页项目中往往会遇到滚动条&#xff0c;然而滚动条原本的样式太丑了&#xff0c;所以要改变滚动条的样式&#xff0c;让滚动条和我们开发的项目更加的美观更加的好看&#xff1b; 案例&#xff1a; <div style"width: 200px; height: 200px;overflow: aut…

网页中滚动条的设置和修改

一、通过css设置滚动条 在所有浏览器&#xff0c;滚动条可定制性最强的当属webkit内核的浏览器了。因为源代码开放的原因&#xff0c;市面上基于webkit内核的浏览器也是很难穷举完。例如有&#xff1a;Google Chrome、Opera&#xff08;opera最近宣布使用webkit内核了&#xf…

如何设置页面滚动条

:root {::-webkit-scrollbar {width: 7px;height: 5px;background: #fff;border-radius: 5px; /*外层轨道*/}::-webkit-scrollbar-thumb {display: block;width: 2px;margin: 0 auto;border-radius: 5px;background: #ccc; /*内层轨道*/transition: all .2s ease-in-out;} } 设…

设置滚动条样式

1.全局设置 ::-webkit-scrollbar {width: 4px;height: 4px; }::-webkit-scrollbar-thumb {border-radius: 5px;-webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2);background-color: #99a9bf; }::-webkit-scrollbar-track {-webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2…

div:给div加滚动条 div的滚动条设置

今天做了个例子&#xff1a; div 的滚动条问题&#xff1a; 两种方法&#xff1a; 一、 <div style" overflow:scroll; width:400px; height:400px;”></div> 记住宽和高一定要设置噢&#xff0c;否则不成的 不过在不超出时&#xff0c;会有下面的滚动条&…

浏览器滚动条css样式设置,看这一篇文章就够了!

一 前言 在CSS 中&#xff0c;如果我们在块级容器上设置了属性: overflow:scroll /* x y 方向都会*/ 或者 overflow-x:scroll /*只是x方向*/ 或者 overflow-y:scroll /*只是y方向*/当块级内容区域超出块级元素范围的时候&#xff0c;就会以滚动条的形式展示&#xff0c;你可…

滚动条如何设置样式和滚动条悬浮显示与隐藏

文章目录 一、滚动条如何设置样式1&#xff1a;滚动条的默认样式&#xff08;如下图&#xff09;1&#xff1a;html代码2&#xff1a;css代码3&#xff1a;效果图 2&#xff1a;CSS设置滚动条的属性&#xff08;重点&#xff09;3&#xff1a;设置滚动条的例子1&#xff1a;css…

web端百度离线地图3.0的制作使用

花了一天的时间查了好多资料&#xff0c;终于地图可以在web端离线访问了。 参考博客&#xff1a;添加链接描述 主要是参考上面博主的文章做好的&#xff0c;非常感谢 这是我做的一个demo&#xff0c;可以直接用。有需要的朋友可以参考&#xff1a; 链接&#xff1a;https://pan…

java百度地图离线开发_【“零起点”--百度地图手机SDK】如何使用离线地图?

摘要:用户使用地图的时候,希望不联网就能展示地图。这时,就需要使用到离线地图了。如何在百度地图SDK里引入离线地图呢? ------------------------------------------------------------------------------------------------------------------- 相关阅读: -------------…

计算机主机中包,百度地图脱机包最终可以在计算机上导入

百度地图终于面世了. 下载后&#xff0c;试用后感觉不错. 我喜欢离线地图功能 但是我不知道下载的人是否太多. 下载离线地图包的速度太慢. 但是捏了&#xff0c;兄弟尝试了导入方法&#xff0c;但是行得通百度地图包离线包&#xff0c;哇哈哈哈 但是&#xff0c;这需要将iPhone…