Java 位操作

Java提供的位运算符有:左移( << )、右移( >> ) 、无符号右移( >>> ) 、位与( & ) 、位或( | )、位非( ~ )、位异或( ^ ),除了位非( ~ )是一元操作符外,其它的都是二元操作符。

print Binary:

System.out.printIn(Integer.toBinaryString(2));  //result is 10.

1、左移( << )

Test1、将5左移2位:

package com.xcy;

public class Test {
    public static void main(String[] args) {
        System.out.println(5<<2);//运行结果是20
    }
}

运行结果是20,但是程序是怎样执行的呢?

首先会将5转为2进制表示形式(java中,整数默认就是int类型,也就是32位):

0000 0000 0000 0000 0000 0000 0000 0101           然后左移2位后,低位补0:

0000 0000 0000 0000 0000 0000 0001 0100           换算成10进制为20

2、右移( >> ) ,右移同理,只是方向不一样罢了(感觉和没说一样)

System.out.println(5>>2);//运行结果是1

还是先将5转为2进制表示形式:

0000 0000 0000 0000 0000 0000 0000 0101 然后右移2位,高位补0:

0000 0000 0000 0000 0000 0000 0000 0001

3、无符号右移( >>> )

我们知道在Java中int类型占32位,可以表示一个正数,也可以表示一个负数。正数换算成二进制后的最高位为0,负数的二进制最高为为1

例如  -5换算成二进制后为:

1111 1111 1111 1111 1111 1111 1111 1011   (刚开始接触二进制时,不知道最高位是用来表示正负之分的,当时就总想不通。。明明算起来得到的就是一个正数-_-)

我们分别对5进行右移3位、 -5进行右移3位和无符号右移3位:

package com.xcy;

public class Test {
    public static void main(String[] args) {
        System.out.println(5>>3);//结果是0
        System.out.println(-5>>3);//结果是-1
        System.out.println(-5>>>3);//结果是536870911
    }
}

reference: http://blog.csdn.net/xiaochunyong/article/details/7748713

时间: 2024-07-30 03:05:10

Java 位操作的相关文章

java 位操作的总结

2014-05-07 17:14 今天工作上需要一个Byte的低5位,高3位.所以查询了资料.总结下如何实现 百度到一个资料: 介绍的很详细 http://www.blogjava.net/zhaomingchao/articles/298318.html 这里就写下代码,来实现他的实例. 工程的位置 : 截图如下: java 位操作的总结,布布扣,bubuko.com

java 位操作 bitwise(按位) operation bit

java 位操作 bitwise(按位) operation bit // 8   0000 0000 0000 1000     原码     1111 1111 1111 0111     反码 +  1 1111 1111 1111 1000     (8的补码)来表示 -8 // -8 1111 1111 1111 1000 65528     补码(正值 的反码+1) // 65535 1111 1111 1111 1111 65535// 65535-65528=7+1=8 操作lo

JAVA 位操作学习

一,基础知识 计算机中数值的编码方式中,原码.反码.补码. 正数的补码与原码相同,负数的补码为:负数的原码符号位不变,其它位取反,再加1. 在计算机中,数值是以补码的形式存储的.补码的好处: ①用补码存储可以减化电路设计,因为它可以将减法转换成加法,简化运算规则,将加减法统一起来了. ②还可以不用考虑符号位,解决了0的两种表示方式:比如,在原码中0的表示有 +0 和 -0 +0=[0000 0000 0000 0000 0000 0000 0000 0000]原 -0=[1000 0000 00

Java位操作全面总结

在计算机中所有数据都是以二进制的形式储存的.位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快.在实际编程中,如果能巧妙运用位操作,完全可以达到四两拨千斤的效果,正因为位操作的这些优点,所以位操作在各大IT公司的笔试面试中一直是个热点问题. 位操作基础 基本的位操作符有与.或.异或.取反.左移.右移这6种,它们的运算规则如下所示: 注意以下几点: 在这6种操作符,只有~取反是单目操作符,其它5种都是双目操作符. 位操作只能用于整形数据,对float和double类型进行位

java位操作总结

在计算机中所有数据都是以二进制的形式储存的. 位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快. 方便演示,首先写个二进制打印方法: private static void printNum(int n){ String num = Integer.toBinaryString(n); if(num.length() == 32){ System.out.println(num); }else{ StringBuilder sb = new StringBuilder(

java位操作

在搞与c的协议解析的时候,要进行很多的位运算.因为位运算,实际编程中用的不多,这里还是记录一下. c协议过来的数据是16进制的字符串. 首先是将16进制的字符串转换为ByteBuffer. public static ByteBuffer string2Buffer(String source) { ByteBuffer buffer = ByteBuffer.allocate(source.length() / 2); for (int idx = 0; idx < buffer.capaci

java中的位操作

之前做项目的时候使用位操作不是很多,今天在刷leetcode上题目的时候用到了位操作,是leetcode中的第29题Divide Two Integers. 一.java的位操作: 位运算表达式由操作数和位运算符组成,实现对整数类型的二进制数进行位运算.位运算符可以分为逻辑运算符(包括~.&.|和^)及移位运算符(包括>>.<<和>>>). 1)左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0).左移一位(在

java的位运算符(&gt;&gt;,&lt;&lt;,&gt;&gt;&gt;,&amp;,|)

主要总结下java的位运算符的操作.java的位运算符不紧可以提高运行效率,同时也有会意想不到的效果(java.util.ArrayDeque有很好的体现),在后续中会举例说明. 开始说位运算符之前,先简单的复习下补码的知识,然后举个简单的例子说明下计算机中的补码操作(计算机中的加减法). 补码 计算机进行加减法操作时,都是以补码进行操作的,所以java中的位运算都是以补码进行操作的.正数的补码是其本身,而负数的补码为其反码+1.如下例子. 因为java中int型是4个字节,需要32位,为了写起

Google Protocol Buffers 编码(Encoding)

Google Protocol Buffers 编码(Encoding) 1. 概述 前三篇文章<Google Protocol Buffers 概述><Google Protocol Buffers 入门><Protocol Buffers 语法指南> 一步一步将大家带入Protocol Buffers的世界,我们已经基本能够使用Protocol Buffers生成代码,编码,解析,输出级读入序列化数据.该篇主要讲述PB message的底层二进制格式.不了解该部分内