`
wqyang
  • 浏览: 10668 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Java中的移位运算符<< ,>>和>>>

阅读更多
zz from http://backkid3120.blogbus.com/logs/38170968.html

public class ShiftTest {

public static void main(String[] args) {
   //右移1位演示
   int x=0x80000000;
   System.out.println("x的十进制表示形式为:"+x);
   System.out.println("x的二进制表示形式为:"+Integer.toBinaryString(x));
   int y=x>>1;
   System.out.println("y的十进制表示形式为:"+y);
   System.out.println("y的二进制表示形式为:"+Integer.toBinaryString(y));
   int z=x>>>1;
   System.out.println("z的十进制表示形式为:"+z);
   System.out.println("z的二进制表示形式为:"+Integer.toBinaryString(z));
 
   //左移1位演示
   int m=0xC0000000;
   System.out.println("m的十进制表示形式为:"+m);
   System.out.println("m的二进制表示形式为:"+Integer.toBinaryString(m));
   int n=m<<1;
   System.out.println("n的十进制表示形式为:"+n);
   System.out.println("n的二进制表示形式为:"+Integer.toBinaryString(n));

}

}
//输出结果:
//x的十进制表示形式为:-2147483648
//x的二进制表示形式为:10000000000000000000000000000000
//y的十进制表示形式为:-1073741824
//y的二进制表示形式为:11000000000000000000000000000000
//z的十进制表示形式为:1073741824
//z的二进制表示形式为:1000000000000000000000000000000
//m的十进制表示形式为:-1073741824
//m的二进制表示形式为:11000000000000000000000000000000
//n的十进制表示形式为:-2147483648
//n的二进制表示形式为:10000000000000000000000000000000

总结:
1.Java中int占4个字节的内存空间,也就是32个二进制位,这也就是我们常说的二进制位。
而一个16进制位相当于4个二进制位,所以int占用8个16进制位。所以   int x=0x80000000;应该能看明白。

2.java中“左移位”运算符 “<<”,是将整型数据的二进制形式,各数位向左移动给定的位数。右边的空出的所有位数补0。如,a<<1,是将a的二进制表示形式,左移移位,右边补零。

3.java中“有符号右移位”运算符 “>>”,是将整型数据的二进制形式,各数位向右移动给定的位数。左边的空出的所有位数根据移位前,原来的内容,原来为0,就补0,原来为1就补1。

4.java中“无符号右移位”运算符 “>>>”,是将整型数据的二进制形式,各数位向右移动给定的位数。左边的空出的所有位数补0。

5.java中,移位运算符适用的数据类型有:byte short char int long。

6.对于低于int型的操作数,先转换为int型再移位。
即:原始数据类型执行算术运算(或按位运算),类型比int型小的(即char、byte、short、),在进行运算之前,这些值会自动提升成int型。参见:使用java原始数据类型的几处细节

7.对于int型整数移位,a>>b,系统先将b对32取模,得到的结果才是真正的移位的位数。例如:a>>33和a>>1的结果是一样的。而,a>>32的结果就是a。(即一个int型数是32位的,如果你移动了32位,那么所有数位都移出了,就没有什么意义了,所以系统会先将移动的位数对32取模)



8.对于long型整数移位,a>>b,系统先将b对64取模,得到的结果才是真正的移位的位数。

9.a>>1与a/2的结果是一样的,a<<1与a*2的结果是一样的。
总之,一个数右移n位的结果是这个数除以2的n次方。一个数左移n位的结果是这个数乘以2的n次方。所以,当我们需要用程序求2的n次方时,可以写成这样,iresult=1<<n;
分享到:
评论
1 楼 CreasyOoh 2012-11-05  
好的 收下了

相关推荐

    java 移位运算符的资源

    java 移位运算符 java 移位运算符 java 移位运算符

    Thinking in java(中文)

    控制程序流程&lt;br&gt;3.1 使用Java运算符&lt;br&gt;3.1.1 优先级&lt;br&gt;3.1.2 赋值&lt;br&gt;3.1.3 算术运算符&lt;br&gt;3.1.4 自动递增和递减&lt;br&gt;3.1.5 关系运算符&lt;br&gt;3.1.6 逻辑运算符&lt;br&gt;3.1.7 按位运算符&lt;br&gt;3.1.8 移位运算符&lt;br&gt;3.1.9 ...

    Java移位运算符1

    java中有三种移位运算符&lt;&lt; : 左移运算符,num &lt;&lt; 1,相当于num乘以2&gt;&gt; : 右移运算符,num &gt;&gt; 1,

    Java中的进制与移位运算符

    Java中的进制与移位运算符 Java中的进制与移位运算符

    Java三种移位运算符原理解析

    主要介绍了Java三种移位运算符原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Java移位运算符详解实例(小结)

    主要介绍了Java移位运算符详解实例(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    移位运算符

    移位运算符

    java中的移位运算符心得总结

    介绍了java中的移位运算符,有需要的朋友可以参考一下

    java中关于移位运算符的demo与总结(推荐)

    下面小编就为大家带来一篇java中关于移位运算符的demo与总结(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    JAVA基础之java的移位运算

    因为Java 使用2的补码来存储负数,并且因为Java 中的所有整数都是有符号的,这样应用位运算符可以容易地达到意想不到的结果。例如,不管你如何打算,Java 用高位来代表负数。为避免这个讨厌的意外,请记住不管高位的...

    Java运算符介绍.pptx.pptx

    Java运算符主要分为四类:算术运算符、关系运算符、逻辑运算符和位运算符,这些运算符用于实现不同的数学和逻辑功能。 算术运算符介绍 算术运算符包括加、减、乘、除和取余等基本运算,它们可以对整数、浮点数和字节...

    Java移位运算

    主要讲述Java中移位运算,包括:基本数据类型范围、二进制的概念,移位运算符,基本数据类型与二进制之间的转换等。

    Java中的位运算符、移位运算详细介绍

    主要介绍了Java中的位运算符、移位运算,有需要的朋友可以参考一下

    【IT十八掌徐培成】Java基础第02天-04.运算符-移位运算-逻辑运算.zip

    【IT十八掌徐培成】Java基础第02天-04.运算符-移位运算-逻辑运算.zip

    java2入门经典.part01

    Java和Unicode码 本章:小结 参考资源 第二章:程序、数据、变量和计算 数据和变量 变量的命名 变量名和Unicode码 变量和类型 整型数据类型 整型字面值 整型变量的声明 浮点数据类型 浮点字面值 浮点型变量的声明 ...

    Java2入门经典.rar

    Java和Unicode码 本章:小结 参考资源 第二章:程序、数据、变量和计算 数据和变量 变量的命名 变量名和Unicode码 变量和类型 整型数据类型 整型字面值 整型变量的声明 浮点数据类型 浮点字面值 浮点型变量的声明 ...

    整理后java开发全套达内学习笔记(含练习)

    进行高精度运算可以用java.math包中BigDecimal类中的方法。 自动类型提升又称作隐式类型转换。 强制类型转换:int ti; (byte) ti ; 强制转换,丢弃高位 宣告变量名称的同时,加上“final”关键词来限定,这个...

    Thinking in Java简体中文(全)

    3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 字串运算符+ 3.1.12 运算符常规操作规则 3.1.13 造型运算符 3.1.14 Java没有“sizeof” 3.1.15 复习计算顺序 3.1.16 运算符总结 3.2 执行控制 ...

    Thinking in Java 中文第四版+习题答案

    3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 字串运算符 3.1.12 运算符常规操作规则 3.1.13 造型运算符 3.1.14 Java没有“sizeof” 3.1.15 复习计算顺序 3.1.16 运算符总结 3.2 执行控制 ...

    2023最新整理版-java基础面试提

    2023最新整理,java...12. 移位运算符 12 13. continue、break 和 return 的区别是什么? 13 14. 成员变量与局部变量的区别? 15 13. 静态变量有什么作用? 15 14. 字符型常量和字符串常量的区别? 15 15. 什么是方法

Global site tag (gtag.js) - Google Analytics