欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java基本语法--运算符之位运算符

程序员文章站 2024-01-11 15:41:40
/*运算符之五:位运算符(了解)** 结论:* 1.位运算符从座的都是整型的数据* 2.<<:在一定范围内,每次往左移动1位,前者×2,移动n位,就×2的n次方* >>:在一定范围内,每次往左移动1位,前者÷2,移动n位,就÷2的n次方*注:(1)最高效方式的己算28---->* ①2<<3 或 8<<1...

/*
*运算符之五:位运算符(了解)
*

  • 结论:
  • 1.位运算符从座的都是整型的数据
  • 2.<<:在一定范围内,每次往左移动1位,前者×2,移动n位,就×2的n次方
  • :在一定范围内,每次往左移动1位,前者÷2,移动n位,就÷2的n次方

注:(1)最高效方式的己算2*8---->

  • ①2<<3 或 8<<1
  • (2)进行位运算时,不会改变原本数据的大小

*/

public class BitTest {
 public static void main(String[] args) {
  int i=21;
  System.out.println("i<<为"+(i<<2));//加上(i<<2)防止运行字符串报错
  System.out.println("i<<为"+(i<<3));
  System.out.println("i<<为"+(i<<4)); 
  System.out.println("i<<为"+(i<<26));
  System.out.println("i<<为"+(i<<27));
  
System.out.println();
  i=-21;
  System.out.println("i<<为"+(i<<2));
  System.out.println("i<<为"+(i<<3));
  System.out.println("i<<为"+(i<<4)); 
  System.out.println("i<<为"+(i<<26));
  System.out.println("i<<为"+(i<<27)+"\n");

 i=21;
  System.out.println("i>>为"+(i>>2));
  System.out.println("i>>为"+(i>>3));
  System.out.println("i>>为"+(i>>4)); 
  System.out.println("i>>为"+(i>>26));
  System.out.println("i>>为"+(i>>27)+"\n");
  
  i=-21;
  System.out.println("i>>为"+(i>>2));
  System.out.println("i>>为"+(i>>3));
  System.out.println("i>>为"+(i>>4)); 
  System.out.println("i>>为"+(i>>26));
  System.out.println("i>>为"+(i>>27)+"\n");
  
  i=-21;
  System.out.println("i>>>为"+(i>>>2));
  System.out.println("i>>>为"+(i>>>3));
  System.out.println("i>>>为"+(i>>>4)); 
  System.out.println("i>>>为"+(i>>>26));
  System.out.println("i>>>为"+(i>>>27));
  System.out.println(i);//说明不改变i的本来值
  
  int m = 12;
  int n = 5;
  System.out.println("m & n 为"+(m&n));//将二进制中0看作false,1看作时true,然后同相位对应运算得出新的数
  System.out.println("m | n 为"+(m|n));
  System.out.println("m ^ n 为"+(m^n));//异或:不一样是true,一样是false
 
 n = 6;
  System.out.println("n为"+(~n));//取反运算,放在数的前面
  System.out.println(n);//取反运算不改变原数据的大小
  
  n = -7;
  System.out.println("n为"+(~n)+"\n");//对应的两个数
 
 //练习:交换两个变量的值
  int num1 = 10;
  int num2 = 20;
  System.out.println("num1="+num1+",num2="+num2);
  
  //方式一:
  //推荐使用
  /*
  int temp;
  temp=num1;
  num1=num2;
  num2=temp;
  */

//方式二:
  //相比方式一,节省内存空间,但方式二有弊端
  //好处:不用定义临时变量
  //弊端:①相加操作可能超出存储范围
  //②有局限性,只能运用于数值类型
  /*
  num1 = num1 + num2;
  num2 = num1 - num2;
  num1 = num1 - num2;
  */

//方式三:使用位运算符
  //相比方式二,不会超出存储翻微,但同样只适用于数值类型
  num1 = num1 ^ num2;
  num2 = num1 ^ num2;
  num1 = num1 ^ num2;

System.out.println("num1="+num1+",num2="+num2);
 }
}

输出:

i<<84
i<<168
i<<336
i<<1409286144
i<<-1476395008

i<<-84
i<<-168
i<<-336
i<<-1409286144
i<<1476395008

i>>5
i>>2
i>>1
i>>0
i>>0

i>>-6
i>>-3
i>>-2
i>>-1
i>>-1

i>>>1073741818
i>>>536870909
i>>>268435454
i>>>63
i>>>31
-21

m & n 为4
m | n 为13
m ^ n 为9
n为-7
6
n为6

num1=10,num2=20
num1=20,num2=10

本文地址:https://blog.csdn.net/wp_886/article/details/110290702

相关标签: java