简单的我们知道左移一位表示乘以2,像1<<2=4。但是左移个几百位呢?1<<100=??

一个int占32位,一个long才占64位,左移几百位真要乘这么多2的话,肯定是存不下的。比如以下代码:

 System.out.println("1 << 100 = " + (1 << 100));System.out.println("1L << 100 = " + (1L << 100));

按照我们的猜测的话,左移高位可能会被舍弃,所以只要左移超过最大的位数结果应该是0,但是上述代码的结果为:

1 << 100 = 16
1L << 100 =  68719476736

我们看到,100位已经超过int和long的最大位数了,但是左移的结果并不是0。根据结果我们能猜的出来,虚拟机在做移位操作的时候对移位位数根据当前数据类型做了取余操作。也就是如果是int类型变量左移,会把需要左移的位数和32取余,long类型变量则会根据64位取余:

1 << n == 1 << (n % 32)
1L << n == 1 << (n % 64)

我们看一下以下代码:

        System.out.println("1 << (100 % 32) = " + (1 << (100 % 32)));System.out.println("1 << 100 = " + (1 << 100));System.out.println("1L << 100 = " + (1L << 100));System.out.println("1L << (100 % 64) = " + (1L << (100 % 64)));

输出为:

1 << (100 % 32) = 16
1 << 100 = 16
1L << 100 = 68719476736
1L << (100 % 64) = 68719476736

注:特别要注意,像byte类型的变量在做移位等操作的时候会将其转换为int,所以在操作的时候需要注意。感兴趣的同学可以试验一下。

Java 左移运算符注意事项相关推荐

  1. java 左移 返回值_java左移右移运算符详解

    在阅读源码的过程中,经常会看到这些符号<< ,>>,>>>,这些符号在Java中叫移位运算符,在写代码的过程中,虽然我们基本上不会去写这些符号,但需要明白这些 ...

  2. JAVA移位运算符-左移、右移、无符号右移 (简解)

    java移位运算符:<<(左移).>>(带符号右移)和>>>(无符号右移). 一.左移运算符<< m<<n 代表把数字m在无溢出的前提 ...

  3. Java移位运算符详解实例——左移位运算符、带符号的右移位运算符

    移位运算符也针对二进制的"位",它主要包括:左移位运算符(<<).右移位运算符(>>>).带符号的右移位运算符(>>). 1.左移运算符 ...

  4. java位运算符取反_java运算符

    Java 语言支持如下运算符: 算术运算符: +,-,*,/,%,++,-- 赋值运算符 = 关系运算符: >,<,>=,<=,==,!=, instanceof 逻辑运算符: ...

  5. JAVA 基本运算符(摘)

    (搞自:Java经典入门教程) http://wenku.baidu.com/link?url=IoWI58cD5vzeHN-NL4pN7Gren-RfzydrhjDlETAByC9L-9ANinyL ...

  6. java 逗号运算符_Java 运算符

    Java 运算符 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 ...

  7. [转载] java左移右移和无符号右移

    参考链接: Java中的按位右移运算符 ###知识点 java的三种位移运算符: <<:左移运算符,num << 1,相当于num乘以2 >>:右移运算符,num ...

  8. 运算符重载——左移运算符重载

    目录: 运算符重载--算术运算符重载 运算符重载--递增运算符重载 运算符重载--左移运算符重载 运算符重载--赋值运算符重载 应用场景: 可以输出自定义的数据类型信息 Person p(" ...

  9. java移位运算符详解

    java移位运算符不外乎就这三种:<<(左移).>>(带符号右移)和>>>(无符号右移). 1. 左移运算符 左移运算符<<使指定值的所有位都左移 ...

最新文章

  1. Unity安卓游戏开发:打造7款2D 3D游戏 Unity Android Game Development : Build 7 2D 3D Games
  2. osg中运用Shader(osg初级篇2)
  3. 在物理机上用u盘安装linux遇到的问题
  4. Windows下创建静态库
  5. 【数据结构与算法】平方探测法散列表的Java实现
  6. 《小强与小明》——正在疯传的伟大的故事
  7. 13 -3 jquery选择器和 jquery动画
  8. .NET单元测试(五):多线程
  9. vue2.0项目部署到服务器_阿里云服务器搭建及项目部署过程---小白篇
  10. Java笔记:Statement和PreparedStatement的区别
  11. Vulkan环境搭建的详细方法(for Windows)
  12. C语言经典编程100题
  13. 企业邮箱账号,如何在foxmail上创建
  14. CondaSSLError: OpenSSL appears to be unavailable on this machine.
  15. 计算机网络原理自考挂科率,3个“挂科率高”的专业,补考更是难上加难,看你专业上榜了吗...
  16. vux安装时报vux-loader配置问题
  17. 怎么用win7系统的电脑录屏
  18. 【特征工程】特征工程技术与方法
  19. [转]花了500学的seo课程教程笔记公布
  20. BUAA离散数学第十章 图论 最短路径及关键通路 python解法

热门文章

  1. 【邮箱问题】无法登录邮箱、需要绑定手机(解决方法)
  2. Android 上网本上使用3G上网卡的可行性
  3. 百度超级链正式发布开放网络白皮书,致力于构建开放共赢区块链新生态
  4. MTK tpd驱动框架
  5. 值得推荐的几部日本电影(一)
  6. 在yolo训练的时候又去测试就会报错:cuda error: out of memory
  7. STM32开发(11)----CubeMX配置独立看门狗(IWDG)
  8. python----3/4 列表简介、操作列表
  9. 一文搞懂K8S高级特性
  10. 爬虫中常见的状态响应码