將整數(shù)的二進(jìn)制奇偶位互換

/*
將一個整數(shù)的奇偶位互換
例如輸入整數(shù)9,二進(jìn)制表示形式為1001
互換后的結(jié)果為0110

    神奇的算法:
    知識點一: 位運算中,1與一個數(shù)字進(jìn)行與運算等于該數(shù)字,其實這是一種保留數(shù)字的運算
    例如 1 和0進(jìn)行與運算,結(jié)果是0自己
    1和 1進(jìn)行與運算,結(jié)果也是1自己,那么1和任何數(shù)進(jìn)行與運算其實是一種保留的運算

    知識點二:位運算中,0與一個數(shù)字進(jìn)行與運算,等于0,其實這是一種舍棄數(shù)字的運算
    例如 0 和 0進(jìn)行與運算,結(jié)果是0
    0和1進(jìn)行與運算,結(jié)果還是0,已經(jīng)舍棄了1,

    算法核心:將目標(biāo)整數(shù),假設(shè)是9,即1001
    第一步:先將...00001001與運算它01010101010101...一共32位,因為int占4個字節(jié),一個字節(jié)8位,
    這里的010101位偶數(shù)位是1
    結(jié)果是 1001
          &0101
          -----
           0001  -----記錄為 ou
   第二步:再將1001與101010......1010進(jìn)行與運算,這里的1010位奇數(shù)為是1
   結(jié)果是 1001
         &1010
         -----
          1000   -----記錄為 ji
    第三步:將ou 左移一位,將ji右移一位
    再進(jìn)行異或運算,結(jié)果為交換奇偶位
    0001  ---ou左移得到0010
    1000  ---ji右移得到0100
    進(jìn)行異或運算  0010
                 ^0100
                 -----
                  0110  ------結(jié)果

    知識點三:
    01010101....0101 可用 0x55555555 表示
    因為 是 32位 ,即0101 0101 0101 0101 0101 0101 0101 0101
    每一個4位可以用一個16進(jìn)制表示,而0101 是5
    所以有8個5 , 即0x55555555
    010101010....0101 可用 0x55555555 表示

    同理1010 等于10 ,10用16進(jìn)制表示是a
    10101010....1010 可用0xaaaaaaaa表示
 */
import java.util.Scanner;

public class 將整數(shù)的二進(jìn)制奇偶位互換 {
   //測試輸入9,二進(jìn)制位1001, 輸出6 二進(jìn)制位110,110前面的0被省略了
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String s = Integer.toBinaryString(n);
        System.out.println(s);

        int ji = n&0xaaaaaaaa; //101010....
        int ou = n&0x55555555; //010101...
        int result = (ou<<1)^(ji>>1);
        System.out.println(result);
        System.out.println(Integer.toBinaryString(result));

    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 爬蟲是python的一個特色,先讓我們了解下爬蟲的基本流程: 一、發(fā)起請求:通過HTTP庫向目標(biāo)站點發(fā)起請求(re...
    位右虛左閱讀 1,140評論 1 1
  • 紅燈亮起 一少年睡眼朦朧,打開門,又看見這個煩人的女人,不耐煩的說, “你怎么又來了,快走,一會我爸回來,又要吵架...
    甜辣沛公閱讀 322評論 0 1
  • 王禹偁 雨恨云愁,江南依舊稱佳麗。水村漁市,一縷孤煙細(xì)。...
    賀清晨的家長閱讀 218評論 1 4
  • 今天聽聞吳總自殺了,心情很不舒服。業(yè)務(wù)上有諸多的不順心,但之前每到黃山都把我照顧的很好。雖然商人利字當(dāng)頭,合作過程...
    柴雞蛋炒米飯閱讀 170評論 0 2
  • 看到這個題目大家一定很驚訝,沒錯,就是吃豬食,確切地說是我親口吃豬食的一次經(jīng)歷,更是難忘那個曾經(jīng)帶我吃過豬食的人。...
    靜待花開芬芳來閱讀 660評論 1 3

友情鏈接更多精彩內(nèi)容