首页 新闻 会员 周边 捐助

如何显示任何整数二进制的位

0
悬赏园豆:100 [待解决问题]
用java语言写一个BitOut类,此类创建一个显示指定位数的对象。位数在1-64位间。
class BitOut{
int numbits;
BitOut(int n)
if(n<1) n=1;
if(n>64) n=64;
numbits=n;
}
为了显示位,要求添加三个方法。
第一个方法显示二进制中的任何一位。例如第3位或第6位

第二个方法显示二进制中某一部分连续的位。例如第234位

第三个方法反向显示整个二进制位。例如原来是01111011,反向就是11011110.
我就是这样子的主页 我就是这样子 | 初学一级 | 园豆:4
提问于:2015-08-18 11:06
< >
分享
所有回答(4)
0

假如numbits是一个十进制的整数,你首先把它转化为一个2进制的数(可以用辗转相除),用一个数组把它保存

第一个方法:参数传n,直接返回数组的[n-1]  第2个方法:参数传开始n,结束k,直接一个循环返回数组[n-1]---[k-1],

第3个方法:不就是数组的倒叙输出了吗?一个循环for(i=数组的长度-1;i>=0;i--){},最后还行希望你自己去动手,每一步都给你讲了

稳稳的河 | 园豆:4216 (老鸟四级) | 2015-08-18 15:50
0

java有linq了吧?直接对位集合做linq操作就好了.

至于int转位集合,除以位对位取余得位值

吴瑞祥 | 园豆:29449 (高人七级) | 2015-08-18 17:07

java好像还没

支持(0) 反对(0) 稳稳的河 | 园豆:4216 (老鸟四级) | 2015-08-18 21:49
0

这都是大学教的基础知识,你可以再把《计算机组成原理》找出来再看看。

int64 numbits = 234324323;

int n = 3; // 因为 numbits 是 int64 类型,所以这里的 n > 0 && n <= sizeof(int64) * 8

第 3 位的值就是 m = numbits & (1 << (3 - 1)) ? 1 : 0;

Launcher | 园豆:45050 (高人七级) | 2015-08-19 09:35
0
 1 package test;
 2 
 3 public class BitOut {
 4    /**
 5     * 数字的二进制位数。
 6     */
 7    int numbits;
 8    /**
 9     * 在此位数内最大数字。
10     */
11    long sum;
12 
13    public BitOut(int n) {
14       if(n<1)  n=1;
15       if(n>64)  n=64;
16       numbits=n;
17       sum = 1;
18       for(int i = 0; i < n; i++) {
19          sum = (sum << 1 + 1);
20       }
21    }
22 
23    /**
24     * 显示二进制中的任何一位。例如第3位或第6位
25     * @param index: index从 1 开始
26     */
27    public int getNum(long arg, int index) {
28       int divisor = (int) Math.pow(2, index - 1);
29       int result = numbits / divisor;
30       return result % 2;
31    } 
32    
33    /**
34     * 显示二进制中某一部分连续的位。例如第234位
35     * 可以使用类似于上面的方法,但我比较喜欢再提供一个角度的方法。
36     * @param index: index 从 1 开始。
37     */
38    public int getNums(long arg, int index) {
39       // 可以调用方法getNum。
40       // return getNum(arg, index + 1) * 100 + getNum(arg, index) * 10 + getNum(arg, index - 1);
41       
42       // 另一种方法是,先将目标数字转化为字符串。
43       String str = Long.toBinaryString(arg);
44       int size = str.length();
45       return Integer.parseInt(str.substring(size - index - 1, size - index + 2));
46    }
47    
48    /**
49     * 反向显示整个二进制位。例如原来是01111011,反向就是11011110.
50     */
51    public long getNegative(long arg) {
52       return arg ^ sum;
53    }
54 
55    public static void main(String[] args) {
56       long arg = 0xf5321;
57       int num = 20;
58       
59       BitOut bit = new BitOut(num);
60       
61       System.out.println(bit.getNum(arg, 3));
62       System.out.println(bit.getNums(arg, 3));
63       System.out.println(bit.getNegative(arg));
64    }
65 }
闫冬 的地盘 | 园豆:218 (菜鸟二级) | 2015-08-31 21:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册