位运算:

~(非)——》二进制数进行0和1的互换

样例:

public class Test {
public static void main(String[] args) {
System.out.println(~-2);//输出1
System.out.println(~-1);//输出0
System.out.println(~0);//输出-1
System.out.println(~1);//输出-2
System.out.println(~2);//输出-3
System.out.println(~3);//输出-4
}
}

^(异或)——》12 ^ 10 = ...01100^01010 =  00110 = 6

样例:

public class Test {
public static void main(String[] args) {
int a = 0;
int b = 0;
b = a = 12^10;
System.out.println(a);//输出为 6
a = a^12;
System.out.println(a);//输出为 10
b = b^10;
System.out.println(b);//输出为 12
}
}

应用:二个不同的数进行交换

public class Test {
public static void main(String[] args) {
int a = 12;
int b = 10;
System.out.println(a + "---" + b);// 输出为12---10
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println(a + "---" + b);// 输出为10---12
}
}

&(与)——》12 & 10 = ...01100 & 01010 = 01000 = 8

样例:

public class Test {
public static void main(String[] args) {
int a = 12;
int b = 10;
int c = a&b;
System.out.println(c);//输出为 8
}
}

应用:

public class Test {
public static void main(String[] args) {
int[] a = new int[2];
a[0] = 5;
a[1] = 6;
for (int i = 0; i < a.length; i++) {
if ((a[i] & 1) == 1) {// 推断是否为奇数
System.out.println(a[i] + "奇数");
} else {
System.out.println(a[i] + "偶数");
}
}
// 输出为:
// 5"奇数"
// 6"偶数"
}
}

|(或)——》12 | 10 = ...01100 | ...01010 = 01110 = 14

样例:

public class Test {
public static void main(String[] args) {
int a = 12;
int b = 10;
// ...01100 | ...01010 = 01110 = 14
int c = a | b;
System.out.println(c);// 输出为14
}
}

应用:和位移一起运算能够打包成不同位数的整数

public class Test {
public static void main(String[] args) {
int a = 1;
int b = 2;
// 256 | 2 = ...01 0000 0000 | ...0010 = ...01 0000 0010 = 258
int c = a << 8 | b;
System.out.println(c);// 输出为258
}
}

>>(右位移)——》12>>2 = 00...01100 >>2 = 00...00011 = 3

-1 >>>24 = 1111...111 >>>24 = 1111...1111 1111 = -1

>>>(无符号)——》 -1 >>> 24 = 1111...111 >>> 24 = 0000...1111 1111 = 255

public class Test {
public static void main(String[] args) {
int a = -1;
// 1111...111 >>> 24 = 0000...1111 1111 = 255
int b = a>>>24;
System.out.println(b);// 输出为255
}
}

12>>2 = 00...01100 >>2 = 00...00011 = 3

java位运算笔记的更多相关文章

  1. Java 位运算2-LeetCode 201 Bitwise AND of Numbers Range

    在Java位运算总结-leetcode题目博文中总结了Java提供的按位运算操作符,今天又碰到LeetCode中一道按位操作的题目 Given a range [m, n] where 0 <= ...

  2. Java位运算总结:位运算用途广泛《转》

    前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...

  3. Java位运算原理及使用讲解

    前言日常开发中位运算不是很常用,但是巧妙的使用位运算可以大量减少运行开销,优化算法.举个例子,翻转操作比较常见,比如初始值为1,操作一次变为0,再操作一次变为1.可能的做法是使用三木运算符,判断原始值 ...

  4. (转)java位运算

    转自:http://aijuans.iteye.com/blog/1850655 Java 位运算(移位.位与.或.异或.非)   public class Test { public static ...

  5. Java位运算总结:位运算用途广泛

    前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...

  6. Java 位运算超全面总结

    1.原码.反码.补码 关于原码.反码.补码的相关知识作者不打算在这里长篇大论,相关知识已有别的大佬总结很好了,还请老铁自行 Google,不过有篇知乎回答是作者学编程以来见过对相关知识最通俗易懂,生动 ...

  7. 我们必须要了解的Java位运算(不仅限于Java)

    本文原创地址为 https://www.cnblogs.com/zh94/p/16195373.html 原创声明:作者:陈咬金. 博客地址:https://www.cnblogs.com/zh94/ ...

  8. Java位运算经典实例

    一 源码.反码.补码 正数的源码.反码.补码相同,例如5:            5的源码:101            5的反码:101            5的补码:101 负数的源码.反码.补 ...

  9. Java 位运算(移位、位与、或、异或、非)

    Java提供的位运算符有:左移( << ).右移( >> ) .无符号右移( >>> ) .位与( & ) .位或( | ).位非( ~ ).位异或( ...

随机推荐

  1. 线段树(1)——点修改&建树

    #include<cstdio> #include<algorithm> using namespace std; #define MAX 10000 #define INF ...

  2. GCC G++ Make CMake自我科普

    Linux下gcc g++ make cmake 联系和区别 C/C++程序从编写到可执行一般经历这几个阶段 编写源代码 编译器编译代码生成目标文件,如.o文件 链接器链接目标文件和其他目标文件/库文 ...

  3. 配置DCOM中excel权限

    ASP.NET 导出Excel 错误解决备忘 网站项目要用到导出为excel文件的功能,程序运行时报错:"检索 COM 类工厂中 CLSID 为{000-0000-0000-C0046} 的 ...

  4. WAMP安装之坑

    Apache安装目录不能有空格 Apache根目录修改后不能直接localhost打开,可以通过改变端口,然后输入 localhost:端口号 打开

  5. 使用序列号激活优动漫PAINT(附激活码)

    优动漫PAINT是一款功能强大的动漫绘图软件,简单的中文界面和丰富的笔刷操纵,再次为设计工作者带来非一般的感受!最近,有不少小伙伴提出这样的疑问:购买安装优动漫PAINT之后,不知道如何激活,在哪里输 ...

  6. Brain Network (hard) CodeForces - 690C 简单倍增 + 一些有趣的推导

    Code: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ...

  7. Python——Day1(笔记代码)

    #print('Hello World')"""n1=input('请输入用户名:')print(n1)n2=input('请输入密码:')print(n2)" ...

  8. 小白学习Spark系列一:Spark简介

    由于最近在工作中刚接触到scala和Spark,并且作为python中毒者,爬行过程很是艰难,所以这一系列分为几个部分记录下学习<Spark快速大数据分析>的知识点以及自己在工程中遇到的小 ...

  9. SLAB

    slab:由于内核会有许多小对象,这些对象构造销毁十分频繁,比如i-node,dentry,这些对象如果每次构建的时候就向内存要一个页(4kb),而其实只有几个字节,这样就会非常浪费,为了解决这个问题 ...

  10. Linux 内核管理

    Linux内核基础:Linux Kernel:  Linux内核的体积结构是单内核的,但充分借鉴了微内核设计体系的优点,为内核引入模块化机制,使得虽然是单内核,但工作在模块化的方式下,并且模块可以动态 ...