Java位运算怎么根据7得到1,2,4这样?

botaocao 2016-06-27 12:47:12
给定一个1,2,4,8等等中的某几个数之和,比如1,2,4的和是7,怎么逆运算根据7得到1,2,4?
...全文
290 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
codingjoy 2016-06-27
  • 打赏
  • 举报
回复
引用 4 楼 skgary 的回复:
[quote=引用 楼主 botaocao 的回复:] 给定一个1,2,4,8等等中的某几个数之和,比如1,2,4的和是7,怎么逆运算根据7得到1,2,4?
拿这个数字和 0x01 左移N位后位与即可得到。 即 for (int i =0 ; i <32, i++){ System.out.println ("get "+(input & (0x01<<i))); }[/quote] 学习了。还要加上一个判断,去除0值
skgary 2016-06-27
  • 打赏
  • 举报
回复
引用 楼主 botaocao 的回复:
给定一个1,2,4,8等等中的某几个数之和,比如1,2,4的和是7,怎么逆运算根据7得到1,2,4?
拿这个数字和 0x01 左移N位后位与即可得到。 即 for (int i =0 ; i <32, i++){ System.out.println ("get "+(input & (0x01<<i))); }
codingjoy 2016-06-27
  • 打赏
  • 举报
回复
不知道你说的位运算是否是只要用位运算符呢?如果不是的话,实际上这个问题的本质就是将任意十进制数的转换为二进制:根据每个二进制位上的0/1,完成这个十进制数的逆运算:
public void transferBi(int num) {
//		接收二进制各位数
		List<Integer> bi = new ArrayList<Integer>();
//		接收组成数
		List<Integer> numbers = new ArrayList<Integer>();
//		计算组成数时,获取当前位的0/1值
		int number = 0;
		
//		二进制转换
		while(num > 0) {
			bi.add(num%2);
			num = num/2;
		}
		
//		计算组成数
		for(int i = 0; i < bi.size(); i++) {
			if((number = bi.get(i)) != 0) {
				numbers.add(number * (int)Math.pow(2, i));
			}
		}
		
//		输出结果
		System.out.println("输入的数由这些数组成:");
		
		for(int i : numbers) {
			System.out.print(i + " ");
		}
	}
caogang_90 2016-06-27
  • 打赏
  • 举报
回复
nikyotensai 2016-06-27
  • 打赏
  • 举报
回复
定义4个整数,然后把所以加的进行判断是否等于输入的,然后给出结果

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧