蓝桥杯:位运算
一 ? ?? 位運算的功能
1,可進行判斷奇偶數
? ?? 對于y=x&1,如果x為偶數,則x的二進制的最后一位是1,此時,y的值是1,如果x是奇數,則其二進制的最后一位是0,y的值是0;
2,獲取二進制位是1還是0
java中有三種移位運算符
<< ? ? ?: ? ? 左移運算符,num << 1,相當于num乘以2
>> ? ? ?: ? ? 右移運算符,num >> 1,相當于num除以2
>>> ? ?: ? ??無符號右移,忽略符號位,空位都以0補齊
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:要獲取二進制值的數* @param index:倒數第一位為0,依次類推*/public static int get(int num, int index){return (num & (0x1 << index)) >> index;}}3.變換兩個整數變量的值
4,不用判斷語句,求整數的絕對值
對于異或運算:數值之間的異或運算就是二進制之間的運算
?
異或運算實例
?
實例2:
求二進制中1的個數
源碼為
package com.lanqiao;import java.util.Scanner;/*** 求二進制中1的個數*/ 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相&,思想是每移動一位,就可以確定n的該位是不是1,int count=0;//比對每一位for(int i=0;i<32;i++){if((n&(1<<i))==(1<<i)){count++;}}System.out.println(count);//方法二:讓n本身向右移位,從0位開始移動,再與1相&,如結果為1,則說明最后一位是1。count=0;for(int i=0;i<32;i++){if(((n>>>i)&1)==1){count++;}}System.out.println(count); //方法三:二進制數每減一,再和該二進制相&,結果就會使原二進制數少一個低位的1,直到去掉所有的1,記下去的次數、//就是二進制數中1的個數count=0;while (n!=0){n=(n-1)&n;count++;}System.out.println(count);}}擴展:
如果詢問:如何用一條語句判斷一個數是不是2的整數次方?
思路:如果二進制位上只有一個1,則這個數就是二的整數次方
解法是利用上個問題的第三種解法
if((n&(n-1)==0)
?
?
?
?
轉載于:https://www.cnblogs.com/chmusk/p/11078929.html
總結
- 上一篇: ie compatibility
- 下一篇: Phaser开源2d引擎 javascr