概述
1、左移:m<<n。左移n位的时候,最左边的n位将被丢弃,最右边补上n个0。00001010<<2=0010100。10001010<<3=01010000
2、右移:m>>n。
(1)无符号数值:最右边n位被丢弃,最左边用0填补。
(2)有符号数值:用符号数填补最左边。原先是0即正数,则用0填补。
1、二进制中1的个数:
题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
答题思路:把一个整数减去1,再和原整数做与运算,会把该整数最右边的1变成0。那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。
public int NumberOf1(int n) {
int count=0;
while(n!=0){
count++;
n=(n-1)&n;
}
return count;
}
2、位运算中异或的用法
(1)题目一:一个数组中,除了有一个数字是单次出现,其他数字都是偶数对出现,求出这个数字?
答题思路:利用异或的思想,如果两个数字相同,那么这两个数字异或之后变为0.因此将这个数组中的数字依次异或,剩下的数字便是单个出现的数字
(2)题目二:一个数组中,有两个数字时单个出现的,其他的都是偶数对出现,求这两个数字?
答题思路:
a、看到题目一,可以联想到,将这个题目的数组分为两份就可以求出。
b、怎么分为两份呢?具体参考剑指offer面试题56
最后
以上就是贤惠龙猫为你收集整理的位运算以及位的左移和右移的全部内容,希望文章能够帮你解决位运算以及位的左移和右移所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复