用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.
假如numbits是一个十进制的整数,你首先把它转化为一个2进制的数(可以用辗转相除),用一个数组把它保存
第一个方法:参数传n,直接返回数组的[n-1] 第2个方法:参数传开始n,结束k,直接一个循环返回数组[n-1]---[k-1],
第3个方法:不就是数组的倒叙输出了吗?一个循环for(i=数组的长度-1;i>=0;i--){},最后还行希望你自己去动手,每一步都给你讲了
java有linq了吧?直接对位集合做linq操作就好了.
至于int转位集合,除以位对位取余得位值
java好像还没
这都是大学教的基础知识,你可以再把《计算机组成原理》找出来再看看。
int64 numbits = 234324323;
int n = 3; // 因为 numbits 是 int64 类型,所以这里的 n > 0 && n <= sizeof(int64) * 8
第 3 位的值就是 m = numbits & (1 << (3 - 1)) ? 1 : 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 }