Java中的位运算符

150 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第21天,点击查看活动详情

位运算符

简介

Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。位运算符作用在所有的位上,并且按位运算。【运算的时候使用二进制】

A = 60, B=13
-----------------
A = 0011 1100
B = 0000 1101
-----------------
A & B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
  ~A  = 1100 0011

描述

操作符描述例子
&(与)如果相对应位都是1,则结果为1,否则为0(A&B)得到12,即0000 1100
|(或)如果相对应位都是 0,则结果为 0,否则为 1(A | B)得到61,即 0011 1101
^(异或)如果相对应位值相同,则结果为0,否则为1(A ^ B)得到49,即 0011 0001
~(非)按位取反运算符翻转操作数的每一位,即0变成1,1变成0(〜A)得到-61,即1100 0011
<<(左移)按位左移运算符。左操作数按位左移右操作数指定的位数。A << 2得到240,即 1111 0000
>>(右移)按位右移运算符。左操作数按位右移右操作数指定的位数。A >> 2得到15即 1111
>>>(右移补0)按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。A>>>2得到15即0000 1111

例子

leetcode上的136题

/*
	给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
	不使用额外的空间
	示例:
		输入: [2,2,1]
		输出: 1
	示例:
		输入: [4,1,2,1,2]
		输出: 4
*/
class Solution {
    public int singleNumber(int[] nums) {
        int a = 0;
        for (int i = 0; i < nums.length; i++) {
            a = a ^ nums[i];
        }
        return a;
    }
}
/*
	分析:
	由不使用额外的空间可知可以往位运算符上靠拢
	nums = [2,3,2,4,4]
	2 ^ 3 ^ 2 ^ 4 ^ 4等价于 2 ^ 2 ^ 4 ^ 4 ^ 3 => 0 ^ 0 ^3 => 3
*/