Java的位运算

左移位操作


左移位运算的符号为【<<】,左移位运算符左面的操作元称作被移位数,右面的操作数称作移位量。

左移位运算是双目运算符,操作元必须是整型类型的数据,其移动过程是:【a << n】运算的过程是通过将a的所有位都左移n位,每左移一个位,左边的最高位上的0或1被移出丢弃,并用0填充右边的低位

注意:

  1. 如果a是byte、short或int型数据,总是先计算出n%32的结果m,然后进行a<<m运算
  2. 对于long型数据,总是先计算出n%64的结果m,然后进行a << m运算

右移位操作

右移位运算的符号为【>>】,右移位运算符左面的操作元称作被移位数,右面的操作数称作移位量。

右移位运算时双目运算符,操作元必须是整型类型的数据,其移动过程是:【a >> n】运算的过程是通过将a的所有位都右移n位,每右移一个位,右边的最低位上的0或1被移出丢弃,并用0或1填充左边的高位【a是正数时用0填充,负数时用1填充】

注意:

  1. 如果a是byte、short或int型数据,总是先计算出n%32的结果m,然后进行a<<m运算
  2. 对于long型数据,总是先计算出n%64的结果m,然后进行a << m运算
/**************************************华丽的分割线性**************************************************/      以下为常用的比特位操作/****************************************************************************************************/
public class BitUtil {

    public static int alterBitValue(int source,int pos,boolean zero) {
        if(zero) { /**source的第pos比特位置为0*/
            return source & Integer.MAX_VALUE ^ (1 << pos -1);
        }
        /**source的第pos比特位置为1*/
        return source | (1 << pos -1);
    }

    public static int getBitValue(int source,int pos) {
        /**保留source第pos位的比特值,其余为置为0*/
        source = source & (Integer.MAX_VALUE & (1 << pos -1));
        source = source >> pos -1;
        if(source == 1)
            return 1;
        return 0;
    }

    public static void main(String []args) {
        /**结果应为4*/
        System.out.println(BitUtil.alterBitValue(6, 2, true));
        /**结果应为19*/
        System.out.println(BitUtil.alterBitValue(3, 5, false));
        /**结果应为0*/
        System.out.println(BitUtil.getBitValue(5, 2));
        /**结果应为1*/
        System.out.println(BitUtil.getBitValue(5, 3));
    }

}
时间: 2024-10-26 15:27:28

Java的位运算的相关文章

JAVA 通过位运算进行简单的加密

我们可以通过一个简单的位运算进行简单的加密 import java.util.Scanner; public class Example{ public static void main(String[]args){ Scanner input = new Scanner(System.in); System.out.println("请输入一个英文字符或解密字符串"); //获取用户输入的字符 String password = scan.nextLine(); //使用String

JAVA语法--位运算

位运算符有:<< , >> , >>> , & , | , ^ , ~ 下面通过实验来学习这几种运算 以下的数据类型是 int 用32位表示,二进制右边的0省略 // 21和-21的二进制表示 System.out.println( Integer.toBinaryString(21));  // 10101 System.out.println(Integer.toBinaryString(-21)); // 1111111111111111111111

JAVA中位运算简单入门

位运算是指将数转换为二进制后通过为的移动来改变数的大小. 1.&     按位与 相同位的两个数字都为1,则为1:若有一个不为1,则为0. 2.|     按位或 相同位只要一个为1即为1,否则为零. 3.^    按位异或 相同位 不同为1,相同则为0 4.~    按位取反 1的取0,0的取1 5.<<  左移 左移几位,后边添加几个0 也就是将数乘以2的几次方 6.>>  右移 右移几位,后边删除几位 也就是将数除以2的几次方 如果对数扩大或者缩小2的几次方倍,应该以

java中位运算^,&amp;,&lt;&lt;,&gt;&gt;,&lt;&lt;&lt;,&gt;&gt;&gt;

1.^(亦或运算) ,针对二进制,相同的为0,不同的为1 public static void main(String[] args) { System.out.println("2^3运算的结果是 :"+(2^3)); //打印的结果是: 2^3运算的结果是 :1 } 2 =======>0010 3 =======>0011 2^3就为0001,结果就是1 2.&(与运算) 针对二进制,只要有一个为0,就为0 还是上述的例子 public static void

java位运算

Java的位运算(bitwise operators)直接对整数类型的位进行操作,这些整数类型包括long.int.short.char和 byte,位运算符具体如下表: 运算符 说明 << 左移位,在低位处补0 >> 右移位,若为正数则高位补0,若为负数则高位补1 >>> 无符号右移位,无论正负都在高位补0 & 与(AND),对两个整型操作数中对应位执行布尔代数,两个位都为1时输出1,否则0. | 或(OR),对两个整型操作数中对应位执行布尔代数,两个位

leetcode:single-number-ii(Java位运算)

题目: Given an array of integers, every element appears three times except for one. Find that single one. Note: Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory? 给定一个整型数组,每个数都出现了三次(只有一个数只出现了一次),找

Java基础-一文搞懂位运算

在日常的Java开发中,位运算使用的不多,使用的更多的是算数运算(+.-.*./.%).关系运算(<.>.<=.>=.==.!=)和逻辑运算(&&.||.!),所以相对来说对位运算不是那么熟悉,本文将以Java的位运算来详细介绍下位运算及其应用. 1. 位运算起源 位运算起源于C语言的低级操作,Java的设计初衷是嵌入到电视机顶盒内,所以这种低级操作方式被保留下来.所谓的低级操作,是因为位运算的操作对象是二进制位,但是这种低级操作对计算机而言是非常简单直接,友好高效

Java 位运算超全面总结

1.原码.反码.补码 关于原码.反码.补码的相关知识作者不打算在这里长篇大论,相关知识已有别的大佬总结很好了,还请老铁自行 Google,不过有篇知乎回答是作者学编程以来见过对相关知识最通俗易懂,生动简洁的解释:对原码.反码.补码最通俗易懂,生动简洁的解释,墙裂建议大家先看完这篇科普文章.在继续讨论之前你要先明白一点:整数在计算机内部都是以补码形式存储的. 2.Java 位运算概览 OK 都看到这儿了那我就假定你已经掌握了原码.反码.补码相关知识(虽然上面那段几乎啥也没讲,纯凑字数) 不废话了.

数字位运算操作与算法简单示例

我们对于位运算可能既陌生又熟悉.知道其运算方法运算过程,但不能运用好它. 首先,我们还是回顾一下Java中位运算都包含那些操作: 一.与运算(&) 运算法则:将二进制数进行按位与运算.0&0=0:0&1=0:1&1=1 : 如:0011 & 0010 = 0010: 二.或运算(|) 运算法则:将二进制数进行按位或运算.0|0 =0:1|0 = 1;  1|1=1 如:0011 & 0010 = 0011: 三.异或运算(^) 运算法则:将二进制数进行按位异