我按照以下解释编写了一个将int号转换为int numberbinary的函数: 假设我们希望将十进制57转换为二进制。我们从写作位置开始 从右到左列的值,直到我们到达位置值更大的列 比十进制数。我们不需要该列,因此我们将其丢弃。因此,我们首先 写:
位置值:64 32 16 8 4 2 1
然后我们丢弃位置值为64的列,留下:
位置值:32 16 8 4 2 1
接下来,我们从最左边的列到右边。我们将32分为57和 观察到57中有一个32,余数为25,所以我们在32列中写1。 我们将16除以25并观察到25中有一个16,余数为9并写入 16列中的1。我们将8分为9并观察到9中有8个有a 接下来的两列当它们的位置时每个都产生0的商 值分为1,因此我们在4和2列中写入0。最后,1比1是1,所以 我们在1栏中写了1。这会产生:
位置值:32 16 8 4 2 1 符号值:1 1 1 0 0 1
我写了这个函数试图跟随解释的脚步。当dec = 10且c2 = 4时,不应继续while循环,因为10< = 4为假,但条件为真。有人能解释一下这里发生了什么吗?
public static int decimaltobinary(int dec){}{
int bin = 0,it;
int c1,c2;
while(dec>0){
it = 1;
do{
c2 = (int)Math.pow(2, it +1);
c1 = (int)Math.pow(2, it);
}while(dec <= c2 && dec < c1);
bin += Math.pow(10, it - 1);
dec = dec % c1;
}
return bin;
}
答案 0 :(得分:2)
如果您不需要自己的算法,则可以更轻松地完成此任务:
public int toBinary(int decimal) {
String binaryString = Integer.toBinaryString(decimal);
return Integer.parseInt(binaryString);
}
如果你想制作自己的算法,比特抨击会更容易。对于整数的二进制表示,int似乎是一个不好的容器,因为你只能保存9位。
public int toBinaryBitBashing(int decimal) {
int bitCount = 6;
int bit = 0;
int binary = 0;
int power = 1;
for(int i=0; i<bitCount; ++i) {
bit = (decimal >> i) & 1;
binary += bit * power;
power *= 10;
}
return binary;
}