常用的位运算

  • & 与运算:两个位都是 1 时,结果才为 1,否则为 0
  • | 或运算:两个位都是 0 时,结果才为 0,否则为 1
  • ^ 异或运算:两个位相同则为 0,不同则为 1
  • ~ 取反运算:0 则变为 1,1 则变为 0
  • << 左移运算:向左进行移位操作,高位丢弃,低位补 0
  • >> 右移运算:向右进行移位操作,对无符号数,高位补 0,对有符号数,高位补符号位。
  • 应用:
    (1)异或 ^,两个相同的数异或之后的结果是 0,即 n ^ n = 0;并且任何数与 0 异或等于它本身,即 n ^ 0 = n。
    (2)n & (n - 1) 这个操作的作用是消除数字 n 的二进制表示中的最后一个 1,即将最后一个 1 变为 0。
        // 判断奇偶
        if((n & 1) == 1){ // 必须加括号,因为 == 的优先级比 & 高
            // 奇数
        }
        if((n & 1) == 0){ // 必须加括号,因为 == 的优先级比 & 高
            // 偶数
        }

        // 位操作实现乘除法
        int a = 4;
        a << 1; // 8
        a >> 1; // 2
        
        // 求相反数
        a = ~a + 1;

        // 判断两个数是否异号
        int x = -1, y = 2;
        boolean f = (x ^ y) < 0; // true          
        int x = 3, y = 2;
        f = (x ^ y) < 0; // false
        
        // 不用临时变量交换两个数
        int a = 1, b = 2;
        a ^= b;
        b ^= a;
        a ^= b;
        
        // 求绝对值
        int abs(int a){
            int i = a >> 31; // 判断符号位。正数右移 31 位得 0,负数右移 31 位得 -1
            return i == 0 ? a : (~a + 1);
        }

        // 将英文字符转换为小写
        char c1 = 'a' | ' '; // char c1 = 97; 即 a
        char c2 = 'A' | ' '; // char c2 = 97; 即 a

        // 将英文字符转换为大写
        char c3 = 'b' & '_'; // char c3 = 66; 即 B
        char c4 = 'B' & '_'; // char c4 = 66; 即 B

        // 英文字符大小写互换
        char c5 = 'c' ^ ' '; // char c5 = 67; 即 C
        char c6 = 'C' ^ ' '; // char c6 = 99; 即 c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

静波波呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值