java奇偶位交换,位运算-将整数的二进制进行奇偶位互换

题目一:将整数的二进制进行奇偶位互换

实例代码:

public class 交换奇偶位 {

public static void main(String[] args) {

//int a = 0b010000000_00000000_00000000_00000000; 测试边界是否满足

int a = 9;

System.out.println("交换前整数:"+a);

System.out.println("交换前整数二进制:"+Integer.toString(a,2));

int b = m(a);

System.out.println("交换后整数:"+b);

System.out.println("交换后整数二进制:"+Integer.toString(b,2));

}

private static int m(int i) {

int ji = i & 0x55555555; //和0101 0101 0101 .。。。。 做与运算保留奇数位 相当于取出

int ou = i & 0xaaaaaaaa; //和1010 1010 1010 .。。。。 做与运算保留偶数位 相当于取出

return (ou>>1)^(ji<<1);

}

}

运行结果:

d5515a92e9d35a76721ffd509acbfc6a.png

题目二:乘2挪整,0-1间浮点实数的二进制表示

给定一个介于0和1之间的实数,(如0.625,类型位double,打印它的二进制表示0.101,因为小数点后的二进制分别表示0.5,0.25,0.125……  如果该数字无法精确的用32位以内的二进制表示,则打印“ERROR”

实例代码:

public class 二进制小数 {

public static void main(String[] args) {

double num = 0.625;

StringBuilder sb = new StringBuilder("0.");

while(num>0){

// 乘2:挪整

double r = num * 2;

// 判断整数部分

if (r>=1) {

sb.append("1");

// 消除整数部分

num = r - 1;

}else {

sb.append("0");

num = r;

}

if (sb.length()>34) { // 这里的34包括“0.”长度

System.out.println("ERROR");

return ;

}

}

System.out.println(sb.toString()); // 结果为0.101

}

}

作者:|旧市拾荒|

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值