java中的位运算和&、|、^运算

这篇具有很好参考价值的文章主要介绍了java中的位运算和&、|、^运算。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  我把平时遇到的位运算参考部分博客和自身应用进行了一点简单的总结,方便记忆与理解;如有错误欢迎各路大神评论指正~

左右移:

1、 <<(算数左移)

表示左移,

不分正负数,低位补0

2、 >>(算数右移)
表示右移,

如果该数为正,则高位补0;
如果该数为负,则高位补1。

3、 >>>(逻辑右移)

 表示无符号右移,

不分正负数,右移后高位补0。

4、<<<(逻辑左移)

表示无符号左移,

不分正负数,低位补0

总结:

逻辑左移=算术左移:高位溢出,低位补0
逻辑右移:低位溢出,高位补0
算术右移:低位溢出,高位用符号位的值补。

示例:

比如一个有符号位的8位二进制数10101010[ ]是添加的数字

逻辑左移一位:0101010[0]

逻辑左移两位:101010[00]

算术左移一位:0101010[0]

算术左移两位:101010[00]

逻辑右移一位:[0]1010101

逻辑右移两位:[00]101010

算术右移一位:[1]1010101

算术右移两位:[11]101010

算术左移和算术右移主要用来进行有符号数的倍增、减半

逻辑左移和逻辑右移主要用来进行无符号数的倍增、减半

Java中是没有无符号数据类型的

public static void main(String[] args) {

   
System.out.println(10 << 1);// 20

   
System.out.println(-10 << 1);// -20

   
System.out.println(10 >> 1);// 5

   
System.out.println(-10 >> 1);// -5

   
System.out.println(10 >>> 1);// 5

   
System.out.println(-10 >>> 1);// 2147483643

}

与、或、异或运算:

&是与运算符,与的规则是转换成二进制比较,同时为11,其余情况为0.

| 是或运算符,或的规则是转换成二进制比较,同时为00,其余情况为1.

^是异或运算符,异或的规则是转换成二进制比较,相同为0,不同为1.

^的妙用——两数交换:代码( a=a^b; b=a^b; a=a^b;)

一个数a与另一个数b异或的结果等于a^b,用结果(a^b)异或a,就会得到b;

假设int a = 2;  int b = 3;则执行上述代码之后得到 a = 3; b = 2;

转换为二进制来运算:

① a=a^b ; -------- 01=10^11 第一步得到结果Ca^b)赋值给a,所以a此时等于01

b=a^b; -------- 10=01^11 第二步 用结果(a^b)异或b,即用C01)异或b11)等于10,所以此时b等于1010转为十进制就是等于2.赋值给bb等于2.

a=a^b; ---------11=01^10 第三步,a01)异或b10),等于11。转为十进制a等于3.

&的妙用——判断奇偶:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String number = br.readLine();

if ((Integer.parseInt(number) & 1) == 1){

    System.out.println("奇数");

}else{

    System.out.println("偶数");

}
 
&的妙用——清除最右边的 1
//& 清除最右边的 1

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

// 输入: number 空格 i

String Str = br.readLine();

int number = Integer.parseInt(Str);

int originalNumber = number;

number &= number - 1;

System.out.println("清除最右边的1后,"+originalNumber+"的值为:"+number);
 
 

&的妙用——判断第i位是 1or 0

//&判断第i位为 1 or 0

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

// 输入: number 空格 i

String Str = br.readLine();

String[] array = Str.split(" ");

int number = Integer.parseInt(array[0]);

int i = Integer.parseInt(array[1]) - 1;



if ((number & (1 << i)) != 0) {

    System.out.println(number + "的第" + (i + 1) + "位为1");

} else {

    System.out.println(number + "的第" + (i + 1) + "位为0");

}

3 2

3的第2位为1

| 的妙用——将第 i 位设置为1
// | 将第 i 位设置为1
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 输入: number 空格 i
String Str = br.readLine();
String[] array = Str.split(" ");
int number = Integer.parseInt(array[0]);
int i = Integer.parseInt(array[1]) - 1;

System.out.print("将"+number+"的第"+(i +1)+"位设置为1后,得到的值为:");
System.out.println(number | (1 << i));

1 2

将1的第2位设置为1后,得到的值为:3

~& 的妙用——将第 i 位设置为0
// ~和& 将第 i 位设置为0

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

// 输入: number 空格 i

String Str = br.readLine();

String[] array = Str.split(" ");

int number = Integer.parseInt(array[0]);

int i = Integer.parseInt(array[1]) - 1;



System.out.print("将"+number+"的第"+(i +1)+"位设置为0后,得到的值为:");

System.out.println(number & ~(1 << i));

3 2

将3的第2位设置为0后,得到的值为:1文章来源地址https://www.toymoban.com/news/detail-455931.html

到了这里,关于java中的位运算和&、|、^运算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java中的运算符--短路运算

    JAVA中有两个短路运算,一个是短路与,一个是短路或。 所谓短路,就是当一个参与运算的操作数足以推断该表达式的值时,另一个操作数(可能是表达式)就不会执行。 短路与: 短路或: || 应用: 逻辑与、逻辑或都是自作向右计算。 两边同时为true,则为true。 有一方为fal

    2024年02月16日
    浏览(45)
  • 【JAVA】你可知JAVA中的运算符|重温运算符

    作者主页:paper jie的博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将javaSE基础知识一网打尽,希望可以帮到读者们哦。 其他专栏

    2024年02月15日
    浏览(45)
  • java中的除法运算

    运行结果:

    2023年04月08日
    浏览(39)
  • Java中的运算符

      Java是一种强大的编程语言,其中运算符是编写代码时不可避免的一部分。运算符允许程序进行各种算术、逻辑和比较操作,以及数学函数。 算术运算符用于执行基本的算术运算,如加减乘除。下表列出了常见的算术运算符: 运算符 描述 + 加法 - 减法 * 乘法 / 除法 % 取模(

    2024年02月14日
    浏览(43)
  • java运算中的取余

    在java运算中有时会出现对一个整数取余操作,首先复习一下小学学过的除法公式: 除数 ÷ 被除数 = 商 如果没有被整数就会出现余数,例:10 ÷ 3 = 3 余数为 1 在java运算中,取余符号是 % 1、第一种情况一个大的整数对一个比它小的整数取余 输出结果: 2、第二种情况一个小的

    2024年02月13日
    浏览(39)
  • Java中的三元运算,以后用得到!

    Java 中的三元运算,平时也叫做三目运算,大家了解吗?下面就详细介绍一下,以后在项目编程中用得到。 在最底层,Java 中的数据是通过使用运算符来操作的。运算符是一种特殊的符号,用来表示数据的运算、赋值和比较等等。每一种编程语言都有运算符,在 Java 中运算符

    2024年02月06日
    浏览(31)
  • day04_java中的运算符

    运算符概述 概念: 对常量或者变量进行操作的符号。用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。不同运算符连接的表达式体现的是不同类型的表达式。 运算符按照其要求的操作数数目来分 ,可以有单目运算符(1 个操作数)、双目运算符( 2

    2024年01月19日
    浏览(40)
  • 【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换

    欢迎大家来到c语言知识小课堂,今天的知识点是操作符和进制 同样都是数字1111,不同进制下数字的大小不同,第二行代表的是其各位数字十进制下的大小,将各位数字的十进制大小相加即1111在这个进制下转化为十进制的大小,从图中我们可以看出来 进制的定义:从右往左

    2024年02月22日
    浏览(52)
  • 使用Java 17中的record替代Lombok的部分功能

    在DD长期更新的Java新特性专栏中,已经介绍过Java 16中开始支持的新特性:record的使用。 之前只是做了介绍,但没有结合之前的编码习惯或规范来聊聊未来的应用变化。最近正好因为互相review一些合作伙伴的代码,产生了一些讨论话题,主要正针对于有了 record 之后,其实之前

    2024年02月02日
    浏览(43)
  • Java中的各种引用类型以及部分引用的相关例子

    在Java中,引用类型主要有四种,分别是:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)。这些类型通常与垃圾回收机制有关,用来描述对象的生命周期和可达性。下面详细介绍每一种引用类型: 强引用 (Strong Reference) 强

    2024年04月13日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包