客户对网站建设公司的评价,网站制作简介,网站取源用iapp做软件,找做报纸的背景图去什么网站Java中的位运算#xff0c;说实话#xff0c;工作了两年的时间里#xff0c;从来没有用过一次#xff0c;因为平时都是些的是业务代码#xff0c;很少接触比较底层的东西#xff0c;我记得第一次在代码中看到还是在HashMap的Hash算法中看到的#xff0c;这次重拾Java基础…Java中的位运算说实话工作了两年的时间里从来没有用过一次因为平时都是些的是业务代码很少接触比较底层的东西我记得第一次在代码中看到还是在HashMap的Hash算法中看到的这次重拾Java基础着重理解了一下Java中的位运算计算机中的运算一般都是操作反码进行运算操作完成之后再将结果的反码转化成原码然后将二进制的结果转化成十进制输出出来其实乘法和除法运算在计算机中都是通过位运算进行的所以我觉得这部分应该好好整理一下以下内容都是传智播客的Java基础中的讲解视频还有一些是讲解的课件、笔记中的内容在此声明。运算符运算位运算符的细节左移空位补0被移除的高位丢失右移被移位的二进制最高位是0右移后空缺位补0最高位是1最高位补1无符号右移被移位二进制无论是0或者1空缺位都是用0补与运算任何二进制位和0进行运算结果都是0和1进行运算都是原值|或运算任何二进制位和0进行|运算结果都是原值和1进行|运算都是1^异或运算任何相同二进制位进行^运算结果都是0不同二进制位进行^运算结果都是1~反码注意右移稍微复杂一点如果最高位是0左边被移空的位就填入0如果高位是1左边被移空的位就填入1相当于除以2的倍数无论最高位是1还是0左边被移空的高位都填入0Java中运算符的优先级(图片来源网路)代码演示各种位运算1 /*2 要做位运算首先要把数据转换为二进制。3 */4 public static voidmain(String[] args) {5 //,|,^,~6 int a 3;7 int b 4;89 System.out.println(3 4);10 System.out.println(3 | 4);11 System.out.println(3 ^ 4);12 System.out.println(~3);1314 }代码分析解读分析因为是位运算所以我们必须先把数据换算成二进制。3的二进制1100000000 00000000 00000000 000000114的二进制10000000000 00000000 00000000 00000100位与运算有0则0。00000000 00000000 00000000 0000001100000000 00000000 00000000 00000100-----------------------------------00000000 00000000 00000000 00000000结果是0|位或运算有1则1。00000000 00000000 00000000 00000011|00000000 00000000 00000000 00000100-----------------------------------00000000 00000000 00000000 00000111结果是7^位异或运算相同则0不同则1。00000000 00000000 00000000 0000001100000000 00000000 00000000 00000100-----------------------------------00000000 00000000 00000000 00000111结果是7~按位取反运算符0变11变000000000 00000000 00000000 00000011~11111111 11111111 11111111 11111100 (补码)补码11111111 11111111 11111111 11111100反码11111111 11111111 11111111 11111011原码10000000 00000000 00000000 00000100结果是-4^异或运算的特点1 /*2 ^的特点一个数据对另一个数据位异或两次该数本身不变。3 */4 public static voidmain(String[] args) {5 int a 10;6 int b 20;78 System.out.println(a ^ b ^ b); //109 System.out.println(a ^ b ^ a); //2010 }1 /*2 ::右移 最高位是0左边补齐0最高为是1左边补齐14 :无符号右移 无论最高位是0还是1左边补齐056 面试题7 请用最有效率的方式写出计算2乘以8的结果?8 2 * 89 2 310 */11 public static voidmain(String[] args) {12 // 把13 System.out.println(3 2); //3*2^2 3*4 12;1415 // 把左边的数据除以2的移动次幂16 System.out.println(24 2); //24 / 2^2 24 / 4 617 System.out.println(24 2);1819 System.out.println(-24 2);20 System.out.println(-24 2);21 }代码分析解读(32位)计算出3的二进制1100000000 00000000 00000000 00000011(00)000000 00000000 00000000 0000001100(右移)的移动计算出-24的二进制11000原码10000000 00000000 00000000 00011000反码11111111 11111111 11111111 11100111补码11111111 11111111 11111111 1110100011111111 11111111 11111111 111010001111111111 11111111 11111111 111010(00) 补码补码1111111111 11111111 11111111 111010反码1111111111 11111111 11111111 111001原码1000000000 00000000 00000000 000110结果-6(无符号右移)的移动计算出-24的二进制11000原码10000000 00000000 00000000 00011000反码11111111 11111111 11111111 11100111补码11111111 11111111 11111111 1110100011111111 11111111 11111111 111010000011111111 11111111 11111111 111010(00)结果1073741818