ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

将整数的奇偶位互换

2021-10-23 18:32:08  阅读:122  来源: 互联网

标签:奇偶 String int System 整数 互换 println out


我感觉这个题给的那种思路的写法是有漏洞的,即第一种给的那种思路,漏斗就在于最高位为1时的情况
而我自己的哪种方法也有漏洞就是给一个整数后s[i+1]这里的i+1会越界,越界的原因在于s1.length()会是这个整数最高位为1向后的位数而不是32位
没有一个满意的写法
代码如下:

package 将整数的奇偶位互换;

/**
 * @author 邓雪松 (づ ̄ 3 ̄)づ)
 * @create 2021-10-23-17-24
 */
public class Demo {
    public static void main(String[] args) {
        int a = 0x80000000;//0110
        String s1 = Integer.toBinaryString(a);
        System.out.println("交换前整数的二进制形式:\n"+s1);
        System.out.println("交换前整数为:"+a);
        int b = m(a);
        String s2 = Integer.toBinaryString(b);
        System.out.println("交换后整数的二进制形式:\n"+s2);
        System.out.println("交换后整数为:"+b);
        //上面是第一种下面是第二种
        String s[] = new String[s1.length()];
        for (int i = 0; i < s.length; i++) {
            s[i] = String.valueOf(s1.charAt(i));
            System.out.print(s[i]);
        }
        for (int i = 0; i < s.length; i+=2) {
            String s3 = s[i];
            s[i] = s[i+1];
            s[i+1] = s3;
        }
        System.out.println();
        for (int i = 0; i < s.length; i++) {
            System.out.print(s[i]);
        }

    }
    private static int m(int i){
        int ou = i&0xaaaaaaaa;//和1010 1010 ... 1010 做与运算取出偶数位
        int ji = i&0x55555555;//和0101 0101 ... 0101 做与运算取出奇数位
        return (ou>>1)^(ji<<1);//然后让偶数位的右移1位->异或->奇数位左移一位 连起来
    }
}

运行结果如下

交换前整数的二进制形式:
10000000000000000000000000000000
交换前整数为:-2147483648
交换后整数的二进制形式:
11000000000000000000000000000000
交换后整数为:-1073741824
10000000000000000000000000000000
01000000000000000000000000000000

标签:奇偶,String,int,System,整数,互换,println,out
来源: https://www.cnblogs.com/Where-am-i/p/15449210.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有