2-4Java基本语法----运算符(5)位运算符

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

  • 结论:
  • 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YY鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值