首页 > 编程语言 >Java中的左移、右移详细分析

Java中的左移、右移详细分析

时间:2022-11-15 16:55:37浏览次数:79  
标签:右移 11111111 20 二进制 左移 补码 Java

转自csdn--https://blog.csdn.net/weixin_42408447/article/details/125914449
前提:<<(左移),>>(右移)皆属于位运算符,其运算比乘除快,所以我们可以用其优化代码。尖头代表方向

1、<<表示左移,不分正负数,低位补0;
规则是带符号位移,高位移出,低位补0,移动位数超过该类型的最大位数,则进行取模,如对Integer型左移34位,实际上只移动了两位。左移一位相当于乘以2的一次方,左移n位相当于乘以2的n次方。

注:以下数据类型默认为byte---8位

左移时不管正负,低位补0

正数:r = 20 << 2

  20的二进制补码:0001 0100

  向左移动两位后:0101 0000

       结果:r = 80

负数:r = -20 << 2

  -20 的二进制原码 :1001 0100

  -20 的二进制反码 :1110 1011

  -20 的二进制补码 :1110 1100

  左移两位后的补码:1011 0000

        反码:1010 1111

        原码:1101 0000

        结果:r = -80

2、>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;

注:以下数据类型默认为byte-8位

正数:r = 20 >> 2

  20的二进制补码:0001 0100

  向右移动两位后:0000 0101

       结果:r = 5

负数:r = -20 >> 2

  -20 的二进制原码 :1001 0100

  -20 的二进制反码 :1110 1011

  -20 的二进制补码 :1110 1100

  右移两位后的补码:1111 1011

        反码:1111 1010

        原码:1000 0101

        结果:r = -5

3、>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0

正数: r = 20 >>> 2

    的结果与 r = 20 >> 2 相同;

负数: r = -20 >>> 2

注:以下数据类型默认为int 32位

  -20:源码:10000000 00000000 00000000 00010100

    反码:11111111 11111111 11111111 11101011

    补码:11111111 11111111 11111111 11101100

    右移:00111111 11111111 11111111 11111011

    结果:r = 1073741819

标签:右移,11111111,20,二进制,左移,补码,Java
From: https://www.cnblogs.com/soulh5/p/16892984.html

相关文章

  • Java注解
    1.@PostConstruct可作用在方法上。在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法。可作为一些数据的常规化加载,比如数据字典。2.......
  • java日期类中的SimpleDateFormat
    packageA_ShangGuiGu.DateTimeTest;importorg.junit.Test;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;/***1.SimpleD......
  • java跨越解决
    1.配置文件解决跨域使用Filter方式进行设置@Slf4j@ComponentpublicclassCorsFilterimplementsFilter{@Overridepublicvoidinit(FilterConfigfilte......
  • Java中restTemplate的使用
    原文链接代码地址本文介绍restTemplate基础用法。Java中get和post的用法请参考:https://mp.weixin.qq.com/s/mC0D1nuCqIori5bWtLorWQ1提供get/post接口1.1Controller......
  • java基础语法--注释
    Java基础语法1.注释1.单行注释//双斜杠开头    2.多行注释/*注释*/  3.文档注释/***/    ......
  • java基础语法--标识符
    标识符  所有的标识符都应该以字母(A-Z或a-z),美元符($),下划线(_)开始  首字母之后可以是任意的组合不可以使用关键字作为方法名或者变量名标识符大小写敏......
  • JAVA系列之类加载机制详解
    类的加载机制?双亲委派机制?什么是类加载器?自定义类加载器有哪些应用场景?通常,在关于Java的类加载部分会遇到以上疑问,本文将对类加载重要部分做详细介绍,包括重要的......
  • JavaScript 如何判断一个对象中是否有某个属性?
    今天讲讲,JavaScript如何判断一个对象中是否有某个属性?我总结了5个方法: 方法1:if(Obj[a]){}缺点:对于参数值为 undefined 和 0 的无效。方法2:if(ainObj){......
  • java 使用注解+Aop+redis实现防止重复提交
    防止重复提交的方式有很多可以用数据库的唯一索引,保证数据完整性在业务层用select....forupdate,依然是使用数据库的事务来做的使用注解+拦截器HandlerInt......
  • java.sql.SQLException: Access denied for user 'root'@'localhost' (using password
    java.sql.SQLException:Accessdeniedforuser'root'@'localhost'(usingpassword:YES)解决办法原因:在运行sql语句报错后自己失去了登录权限解决办法:找到安装mys......