将整数的二进制奇偶位互换

/*
将一个整数的奇偶位互换
例如输入整数9,二进制表示形式为1001
互换后的结果为0110

    神奇的算法:
    知识点一: 位运算中,1与一个数字进行与运算等于该数字,其实这是一种保留数字的运算
    例如 1 和0进行与运算,结果是0自己
    1和 1进行与运算,结果也是1自己,那么1和任何数进行与运算其实是一种保留的运算

    知识点二:位运算中,0与一个数字进行与运算,等于0,其实这是一种舍弃数字的运算
    例如 0 和 0进行与运算,结果是0
    0和1进行与运算,结果还是0,已经舍弃了1,

    算法核心:将目标整数,假设是9,即1001
    第一步:先将...00001001与运算它01010101010101...一共32位,因为int占4个字节,一个字节8位,
    这里的010101位偶数位是1
    结果是 1001
          &0101
          -----
           0001  -----记录为 ou
   第二步:再将1001与101010......1010进行与运算,这里的1010位奇数为是1
   结果是 1001
         &1010
         -----
          1000   -----记录为 ji
    第三步:将ou 左移一位,将ji右移一位
    再进行异或运算,结果为交换奇偶位
    0001  ---ou左移得到0010
    1000  ---ji右移得到0100
    进行异或运算  0010
                 ^0100
                 -----
                  0110  ------结果

    知识点三:
    01010101....0101 可用 0x55555555 表示
    因为 是 32位 ,即0101 0101 0101 0101 0101 0101 0101 0101
    每一个4位可以用一个16进制表示,而0101 是5
    所以有8个5 , 即0x55555555
    010101010....0101 可用 0x55555555 表示

    同理1010 等于10 ,10用16进制表示是a
    10101010....1010 可用0xaaaaaaaa表示
 */
import java.util.Scanner;

public class 将整数的二进制奇偶位互换 {
   //测试输入9,二进制位1001, 输出6 二进制位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));

    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 爬虫是python的一个特色,先让我们了解下爬虫的基本流程: 一、发起请求:通过HTTP库向目标站点发起请求(re...
    位右虚左阅读 1,048评论 1 1
  • 红灯亮起 一少年睡眼朦胧,打开门,又看见这个烦人的女人,不耐烦的说, “你怎么又来了,快走,一会我爸回来,又要吵架...
    甜辣沛公阅读 277评论 0 1
  • 王禹偁 雨恨云愁,江南依旧称佳丽。水村渔市,一缕孤烟细。...
    贺清晨的家长阅读 170评论 1 4
  • 今天听闻吴总自杀了,心情很不舒服。业务上有诸多的不顺心,但之前每到黄山都把我照顾的很好。虽然商人利字当头,合作过程...
    柴鸡蛋炒米饭阅读 144评论 0 2
  • 看到这个题目大家一定很惊讶,没错,就是吃猪食,确切地说是我亲口吃猪食的一次经历,更是难忘那个曾经带我吃过猪食的人。...
    静待花开芬芳来阅读 634评论 1 3