1、按位与运算(&)
运算规则:0 & 0 = 0 ; 0 & 1 = 1 ; 1 & 0 = 0 ; 1 & 1 = 1
两位同为1,结果才为1,否则结果为0 。
负数按补码形式参与按位与运算。用途:(1)清零 如果想将一个数清零,让这个数与上0;(2)取一个二进制数的指定位 想去一个数的指定位,只需让该数与上一个数,该数的对应位置为1,其余为0;
2、按位或运算(|)
运算规则:0 | 0 = 0 ; 0 | 1 = 1; 1 | 0 = 1; 1 | 1 = 1;只有有一个为1结果就为1。负数按补码形式参与按位与运算。用途:(1)查找一个数的某些位置为1
3、 按位异或运算(^)
运算规则:0 ^ 0 = 0 ; 0 ^ 1 = 1 ;1 ^ 0 = 1; 1 ^ 1 = 0
两数相异位1,否则为0;
用途:(1)将某数进行翻转 将某个二进制数对应位置翻转,只需该数异或一个X,X的对应位置为1,其余为0 。
(2)与0相异或,保留原值
题目:(1) 1-1000放在1001个元素中,只有一个数重复了,如何快速找出该数是多少?解法一:(1+2+3+...1000+x) -(1+2+3+...1000) 缺点:如果数列过大,可能会溢出解法二:(1 ^ 2 ^ 3 ^....^ 1000 ^ x ) ^ (1 ^ 2 ^ 3 ^....1000)(2)一系列数中,除了两个数外,其他数都只出现了两次,找出这两个数
解法:将所有数进行异或运算,便可得到这两个数的异或结果。找出该结果最高位为1的下标,然后将数组中元素通过该位为0 和1分为两个数组中,分别将两数组中的元素进行异或便可得到两个数。
位运算
最新推荐文章于 2023-05-21 01:45:26 发布