我是靠谱客的博主 迷路发夹,最近开发中收集的这篇文章主要介绍位运算简要应用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

位运算符:

&:按位与。例: 111 & 010 =  010

|:按位或。例: 111 | 010 = 111

~:按位非。例: ~010 = 101

^:按位异或。例:111 | 010 = 101

<<:左位移运算符。例:111 << 1 = 110; 111 << 2 = 100

>>:右位移运算符。例:111 >> 1 = 011;111 >> 2 = 001

应用:

1、一个数乘以2的n次方:m * 2 ^ n <=> m << n

例:3 * 2 ^ 2 = 12  <=>  3 << 2 = 12

详解:3的二进制:11;左移两位后:1100,及为12

2、一个数除以2的n次方:m / (2 ^ n) <=> m >> n

例:12 / ( 2 ^ 2 ) = 3  <=>  12 >> 2 = 3

解析:12的二进制:1100;右移两位后:0011,及为3

3、判断一个数的奇偶性:n & 1 == 1 ? ”奇数” : ”偶数”;

例:3 & 1 <=> 11 & 01 = 1;

       4 & 1 <=> 100 & 001 = 0;

解析:奇数的二进制末尾数必为1,所以按位与 的时候结果为 1;

           偶数的二进制末尾数必为0,所以按位与 的时候结果为 0;

4、两数交换:x ^= y;  y ^= x;  x ^= y; 

例:int x = 1;

        int y = 2; 

         x = x ^ y; (1)

         y = y ^ x; (2)

         x = x ^ y; (3)

         ==> x = 2; y = 1;

解析:

         将上面步骤合一下:

                  y = y ^ (x ^ y)  <=>  y ^ x ^ y  <=> y ^ y ^ x <=> 0 ^ x => x ; 此时就将 x 变量的值赋值给 y 变量了

                  x = (x ^ y)^ x <=> x ^ y ^ x  <=> x ^ x ^ y <=> 0 ^ y => y;此时就将 y 变量的值赋值给 x 变量了

4、取绝对值:(1) 、(x ^ (x >> 31)) - (x >> 31)  (2)、(x + (x >> 31)) ^ (x >> 31)

5、两整数相加:

public int sub(int a, int b) {
if (0 == b) return a;
int sum = a ^ b;
// 不计进位的和
int carry = a & b;
// 进位
carry <<= 1;
return sub(sum, carry);
}

最后

以上就是迷路发夹为你收集整理的位运算简要应用的全部内容,希望文章能够帮你解决位运算简要应用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部