Java笔记:位运算

一、数据存储

二进制数在内存中以补码的形式存放。正数的反码、补码均为本身。负数的反码为符号位不变且其余位取反,补码为反码+1。

二、位运算

①按位取反:反转操作数中的所有位。

②按位与:仅当两个操作数都是1,结果为1。否则为0。

③按位或:只要有一个操作数是1,结果为1。否则为0。

④按位异或:只有一个操作数是1,结果为1。否则为0。

⑤左移:将不包括符号位的所有数值向左移动指定次数,右边补充0。每左移一位相当于*2。

⑥右移:将不包括符号位的所有数值向右移动指定次数,左边补充0。每右移一位相当于/2。

⑦无符号右移:将包括符号位的所有数值向右移动指定次数,仅对宽度为32、64的数值有意义,更小的数值会自动提升。

三、示例

class Solution {
    public static void main(String[] args) {
        byte a = 42;//00101010
        byte b = 15;//00001111
        System.out.println(~a);//按位取反结果为11010101 补码为10101011
        System.out.println(a & b);//按位与结果为00001010
        System.out.println(a | b);//按位或结果为00101111
        System.out.println(a ^ b);//按位异或结果为00100101

        byte c = 64;//01000000
        System.out.println(c << 1);//左移1位结果为10000000
        System.out.println(c >> 1);//右移1位结果为00100000

        int d = -1;//11111111 111111111 111111111 111111111
        System.out.println(d >>> 24);//无符号右移24位结果为00000000 00000000 00000000 11111111
    }
}

原文地址:https://www.cnblogs.com/arseneyao/p/8440059.html

时间: 2024-10-03 01:34:07

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的位运算

左移位操作 左移位运算的符号为[<<],左移位运算符左面的操作元称作被移位数,右面的操作数称作移位量. 左移位运算是双目运算符,操作元必须是整型类型的数据,其移动过程是:[a << n]运算的过程是通过将a的所有位都左移n位,每左移一个位,左边的最高位上的0或1被移出丢弃,并用0填充右边的低位 注意: 如果a是byte.short或int型数据,总是先计算出n%32的结果m,然后进行a<<m运算 对于long型数据,总是先计算出n%64的结果m,然后进行a <&l

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: 三.异或运算(^) 运算法则:将二进制数进行按位异