/*【位运算符】 运算符: 运算 范例 说明 <<: 左移 3<<2=12--->3*2*2=12 >>: 右移 3>>2=1---->3/2=1 >>>: 无符号右移 3>>>2=1--->3/2=1 &: 与运算 6 & 3=2 |: 或运算 6 | 3=7 ^: 异或运算 6^3=5 ~: 反码 ~6=-7 */ //左移:左移就是乘以2的次幂运算。移几位就是几次幂。 //左移的用处:比如要在计算机中做3*4的运算, //在计算机中是用二进制相乘的011*100,但是 //现在可以用位运算的方式(左移来运算), //即把3左移2位就得到结果了,这样的运算速度很快, //其弊端是只能操作2的倍数,在开发过程中如果要操作2 //的倍数或者2的次幂时,可用位运算来实现。 //右移:右移就是除以2的次幂运算。移几位就是几次幂。 /* 右移时,原最高位是什么,空位就补什么(保持原来的符号性)。 */ //无符号右移:不用于做除法运算。 /* 无论原最高位是什么,空位都补0. 用处在于:获取二进制中某一段的值 比如: 一个二进制为:00000000 00111100 00000000 00110110 如果三位三位的获取其值(一次右移无符号三位),第一次 右移三位取得的是(110:结果为6),然后去掉这三位,则 下一个三位变成了最低的三位,再获取这个三位……最后得到的 结果是这个二进制对应的八进制数。(获取四位,就是二进制 对应的十六进制) 总结就是:在进行关于2的运算时,考虑左移和右移运算。 在进行二进制的位操作是,要用到无符号右移。 */ //&运算: /* 在二进制中在&运算过程中,只有全为1时,结果才为1, 否则为0. 用处是:在获取某一个二进制的某几位的时候比如: 一个二进制为00101011,要获取最后三位是可以用三个1和 最后三个二进制为相与 一句话:用来获取二进制中的有效位1 00101011 00000111 ----------- 00000011------最后三位为二进制位 当要获取第二个三位时,可以先把此二进制无符号右移三位 在和00000111相与即可 */ //|:运算 /* 6|3= 110 |001 ---- 111 --->7(十进制) */ //^:运算 /* 6^3=5 110 ^011 ---- 101 --->5 ^011 ---- 110 --->6 即6^3^3 = 6; 一个数异或另一个数,结果还是原数。(用于加密方面) */ //~:取反运算: /* ~6=-7:计算如下: 6--->00000110 取反得:--->11111001 因为在计算机中是用补码形式存放的。所以要把11111001 看成一段补码,现在把这个补码转换为原码(先变为反码: 减1就行得--->11111000,再变为原码,最高位是符号位,不变 其他为按位取反得--->10000111再转化为十进制为-7) 比如6取反再加1得-6 */ //位运算符的练习: /* 1,如何最有效率的计算2*8 通过左移来运算:2<<<3--->2*8 = 16; //System.out.println(2<<3);--->结果是16 2, 对两个整数变量的值进行互换(不需要第三方变量) int a = 3,b = 7; //通过第三方变量的方法如下: int temp; temp = a; a = b; b = temp; //(不经过第三方变量)通过和的形式。有个弊端,两个数据较大,可能会超出int范围。 //这个方法不太好 a = a+b; //a = 3+7; b = a-b; //b = 3+7-7; b = 3; a = a=b; //a = 3+7-3; a = 7; //(不经过第三方变量)通过位运算来解决。 a = a^b; //a = 3^7; b = a^b; //b = 3^7^7; --->b = 3; a = a^b; //a = 3^7^3; --->a = 7; */ //三元运算符:格式:(条件表达式)?表达式1:表达式2; //int x = 2,y; //y = x>1?100:200; //需求:有三个数,想知道最大的是哪个? /* int a = 2,b=3,c =4,max; if(a>b) max = a; if(max<b) max = b; System.out.println("max="+max); */ class OperateDemo1 { public static void main(String[] args) { int a=3,b=40,c=5; int max; if(a>b) max = a; else max = b; if(max<c) max = c; else max = b; System.out.println("max="+max); } }
时间: 2024-11-07 16:53:30