蓝桥杯:位运算
一 ? ?? 位運(yùn)算的功能
1,可進(jìn)行判斷奇偶數(shù)
? ?? 對(duì)于y=x&1,如果x為偶數(shù),則x的二進(jìn)制的最后一位是1,此時(shí),y的值是1,如果x是奇數(shù),則其二進(jìn)制的最后一位是0,y的值是0;
2,獲取二進(jìn)制位是1還是0
java中有三種移位運(yùn)算符
<< ? ? ?: ? ? 左移運(yùn)算符,num << 1,相當(dāng)于num乘以2
>> ? ? ?: ? ? 右移運(yùn)算符,num >> 1,相當(dāng)于num除以2
>>> ? ?: ? ??無符號(hào)右移,忽略符號(hào)位,空位都以0補(bǔ)齊
package com.lanqiao; public class Binary {public static void main(String[] args){int num = 19;String binaryString = Integer.toBinaryString(num);System.out.println(binaryString);for (int i = 0; i < binaryString.getBytes().length; i++){System.out.print(get(num, i) + "\t");}}/*** @param num:要獲取二進(jìn)制值的數(shù)* @param index:倒數(shù)第一位為0,依次類推*/public static int get(int num, int index){return (num & (0x1 << index)) >> index;}}3.變換兩個(gè)整數(shù)變量的值
4,不用判斷語句,求整數(shù)的絕對(duì)值
對(duì)于異或運(yùn)算:數(shù)值之間的異或運(yùn)算就是二進(jìn)制之間的運(yùn)算
?
異或運(yùn)算實(shí)例
?
實(shí)例2:
求二進(jìn)制中1的個(gè)數(shù)
源碼為
package com.lanqiao;import java.util.Scanner;/*** 求二進(jìn)制中1的個(gè)數(shù)*/ public class Binary2 {public static void main(String args[]){Scanner scanner=new Scanner(System.in);int n=scanner.nextInt();System.out.println(Integer.toString(n,2)); //方法一:將000001中的1不斷向左移位并與n相&,思想是每移動(dòng)一位,就可以確定n的該位是不是1,int count=0;//比對(duì)每一位for(int i=0;i<32;i++){if((n&(1<<i))==(1<<i)){count++;}}System.out.println(count);//方法二:讓n本身向右移位,從0位開始移動(dòng),再與1相&,如結(jié)果為1,則說明最后一位是1。count=0;for(int i=0;i<32;i++){if(((n>>>i)&1)==1){count++;}}System.out.println(count); //方法三:二進(jìn)制數(shù)每減一,再和該二進(jìn)制相&,結(jié)果就會(huì)使原二進(jìn)制數(shù)少一個(gè)低位的1,直到去掉所有的1,記下去的次數(shù)、//就是二進(jìn)制數(shù)中1的個(gè)數(shù)count=0;while (n!=0){n=(n-1)&n;count++;}System.out.println(count);}}擴(kuò)展:
如果詢問:如何用一條語句判斷一個(gè)數(shù)是不是2的整數(shù)次方?
思路:如果二進(jìn)制位上只有一個(gè)1,則這個(gè)數(shù)就是二的整數(shù)次方
解法是利用上個(gè)問題的第三種解法
if((n&(n-1)==0)
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/chmusk/p/11078929.html
總結(jié)
- 上一篇: ie compatibility
- 下一篇: CodeForces - 1110C-M