首页 > 编程语言 >Java中的 << , >> , 和 >>>所代表的含义

Java中的 << , >> , 和 >>>所代表的含义

时间:2024-02-06 09:48:42浏览次数:33  
标签:右移 11111111 代表 Java 符号 二进制 含义 补码 15

Java中的 << , >> , 和 >>>所代表的含义

标题 Java中的 << , >> , 和 >>>所代表的含义

1.<<表示左移运算符

例如8<<1,表示将8向左移1位,低位补0,结果为16。
例如8<<2,表示将8向左移2位,低位补0,结果为32。
左移一位相当于乘以二
二进制演算:
8的二进制:1 0 0 0
向左移动两位结果为1 0 0 0 0 0,换算成十进制即为32,左移就是将数变大

2.>>表示右移运算符

例如 8>>1,表示将8向右移动1位,结果为4。高位补0。
例如 8>>2,表示将8向右移动2位,结果为2。高位补0。
右移一位相当于除以二
二进制演算:
8的二进制:1 0 0 0
向右移动两位:0 0 1 0即为2,右移就是将数变小

3.>>>表示无符号右移运算符。高位补0

例如8>>>2表示将8向右移位2位,结果为2。
这个在正数时也可以和右移运算符一起理解。

但是在负数时就不一样了
举个例子:
将15右移无符号右移两位: 15>>>2
15的二进制是:1 1 1 1,右移两位变为 :0 0 1 1 ,转换成二进制为:3
那么-15>>>2 又是多少呢?,先求得-15的二进制,往下看

Demo:求-15>>2 和 -15>>>2

解释:一个是带符号右移两位,一个是无符号右移两位。
区别:看下面的讲解基本就明白了!

一个二进制的正数的原码和反码和补码是相同的,负数就不一样了。

要知道一个完整的二进制是由32位表示的

  • -15的完整二进制为:
    10000000 00000000 00000000 00001111
  • -15的反码为:
    11111111 11111111 11111111 11110000 (反码:将二进制数除符号位外取反,所得的新二进制数为反码)
  • -15的补码为:
    11111111 11111111 11111111 11110001 (补码:反码加1称为补码。也就是说,要得到一个数的补码,先得到反码,然后将反码最右边的位加上1即为补码。)
  1. 求-15>>2
    将-15的补码带符号右移两位
    -15的补码为:
    11111111 11111111 11111111 11110001
    将-15的补码带符号右移两位:
    11111111 11111111 11111111 11111100
    不懂看图解
    图解:
    在这里插入图片描述在这里插入图片描述
    看我圈住的红色部分,将红色部分那块右移两位到最右边(最右边两个被替换覆盖),左边空出的两个高位补1,这就是带符号右移

    求值:
    将补码无符号右移后的结果保留符号位其余的位取反:
    10000000 00000000 00000000 00000011
    然后+1,即为最后的结果:
    10000000 00000000 00000000 00000100
    结果为-4

  2. 求-15>>>2
    将-15的补码无符号右移两位
    -15的补码为:
    11111111 11111111 11111111 11110001
    将-15的补码无符号右移两位:
    00111111 11111111 11111111 11111100

    图解
    在这里插入图片描述
    在这里插入图片描述
    看我圈住的红色部分,将红色部分那块右移两位到最右边(最右边两个被替换覆盖),左边空出的两个高位补0,这就是无符号右移

    求值:
    将-15的补码无符号右移两位后直接求结果:
    00111111 11111111 11111111 11111100
    结果为:1073741820

    验证:
    在这里插入图片描述
    在这里插入图片描述

总结:

  1. 正数的左右移管它是有符号还是无符号,直接在原码的基础上移动,并求结果就好了
  2. 负数的左右移区别在有符号左右移和无符号左右移
    有符号的左右移: 第一步 — 求出负数的补码 ,第二步 — 将补码左右移,第三步 — 高位不变其余取反,最后一位再加1
    无符号的左右移: 第一步 — 求出负数的补码 ,第二步 — 将补码左右移,第三步 — 直接求结果
原文链接:https://blog.csdn.net/weixin_49149614/article/details/107531270

标签:右移,11111111,代表,Java,符号,二进制,含义,补码,15
From: https://www.cnblogs.com/sunny3158/p/18009137

相关文章

  • 【转帖】解决Java/MySQL性能问题的思路
    plantegg.github.io/2023/08/28/解决问题思路/ 10年前写的,重新发一下系统性能问题CPU(基本上WEB服务器没有多少IO,主要是CPU有瓶颈)top/vmstat观察CPU使用率,Load负载,r/b线程数量等;IO(数据库大多数时候瓶颈是IO,主要是索引没建好;如果数据库CPU紧张的话,检查一下是不是orderb......
  • JAVA对象的成员方法
    方法介绍使用方法的好处......
  • JAVA对象和属性
    对象对象实例举例,快速认识对象创建一个对象==实例化一个对象==把类实例化点击查看代码/***@authorLittleBear*@date2024-02-05-21:47*/publicclassobject{publicstaticvoidmain(String[]args){Tt=newT("xxm",111);//对象实......
  • Java NIO
    NIO简介在传统的JavaI/O模型(BIO)中,I/O操作是以阻塞的方式进行的。也就是说,当一个线程执行一个I/O操作时,它会被阻塞直到操作完成。这种阻塞模型在处理多个并发连接时可能会导致性能瓶颈,因为需要为每个连接创建一个线程,而线程的创建和切换都是有开销的。为了解决这个问题,在......
  • Java测试代码编写
    一、单元测试1.1引入依赖1、root<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><s......
  • JAVA框架学习
    Struts--------------Struts2------------------>Hibernate---------------->iBatis(MyBatis)--------spring-------------------->springmvc-------->MyBatis-plus2000年2006年      2001年2002年2003年......
  • Java IO
    JavaIO基础知识IO流简介IO即 Input/Output,输入和输出。数据输入到计算机内存的过程即输入,反之输出到外部存储(比如数据库,文件,远程主机)的过程即输出。数据传输过程类似于水流,因此称为IO流。IO流在Java中分为输入流和输出流,而根据数据的处理方式又分为字节流和字符流。Ja......
  • 耗时一个月我问遍了身边的大佬,零基础自学Java的路线,适用程序员入门&进阶,Java学习路线,2
    作为一个有志于成为Java程序员的你,或许正处在技术生涯的起点,或许已经走过了入门的道路,期待跨越进阶的门槛?无论处于哪个阶段,一条明确的学习路线都至关重要,通过向众多行业大佬请教、反复探索和实践,总结出一套适用于零基础自学者大学四年Java学习路线,也同样适用于从初级到研发专家的学......
  • Java-10注解与反射
    注解注解(Annotation)也被称为元数据(Metadata),用于修饰包、方法、属性、构造器、局部变量等数据信息。注解不影响程序逻辑,但注解可以被编译或运行。在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE中注解占据了更重要的角色,例如用来配置应用程序的......
  • JAVA线程池
    线程池中的四种拒绝策略通常是指:AbortPolicy(默认策略):这是默认的拒绝策略。当线程池无法接受新任务时,它会抛出RejectedExecutionException异常。CallerRunsPolicy:在这种策略下,当线程池无法接受新任务时,会使用提交任务的线程来执行该任务。这样做的目的是为了降低新任务的提交......