-2

背景

我正在做一项大学作业,这需要我绘制一个由 4 个十六进制数字表示的模式。到目前为止,我已经设法创建了我需要做的一切,除了一点点小东西:我的代码中有一个错误,它使 A - F(或十进制 10-17)之间的十六进制值无用。

我创建了一个从十六进制获取十进制值并将其转换为二进制值的方法。

以下是我获得的结果列表:

 Decimal 1  -> Binary 1    -> CORRECT
 Decimal 2  -> Binary 1    -> Should be 10
 Decimal 3  -> Binary 11   -> CORRECT
 Decimal 4  -> Binary 1    -> Should be 100
 Decimal 5  -> Binary 101  -> CORRECT
 Decimal 6  -> Binary 11   -> Should be 110
 Decimal 7  -> Binary 111  -> CORRECT
 Decimal 8  -> Binary 1    -> Should be 1000
 Decimal 9  -> Binary 1001 -> CORRECT
 Decimal 10 -> Binary 101  -> Should be 1010
 Decimal 11 -> Binary 1101 -> Should be 1011
 Decimal 12 -> Binary 11   -> Should be 1100
 Decimal 13 -> Binary 1011 -> Should be 1101
 Decimal 14 -> Binary 111  -> Should be 1110
 Decimal 15 -> Binary 1111 -> CORRECT

输出实际上与应有的相反。如何反转输出,或者首先让我的代码输出正确的顺序?

编辑#2

这里的问题,正如原始帖子中提到的那样:

  for (int i = 0; i<=3; i++){ //loops trough my pattern array 
                            // Will receive the binary values
    while (nDecimal[i]!=0){
    pattern[i]= pattern[i]*10 + nDecimal[i]%2;
    nDecimal[i]/=2;
    System.out.println("Binary ["+i+"] " + pattern[i]);
}

工作不正常,并以相反的顺序输出二进制数字。简而言之,这是进行转换的代码:

    int myDecimal;
    int result;
   while (myDecimal!=0){
    result= result*10 + myDecimal%2;
    myDecimal=2;

}
4

2 回答 2

2

奥克,我会把这个作为答案,即使它并没有真正回答你的问题,因此我违反了规则。但是你需要理解它。

数值的概念与该值的可能表示形式之间存在很大差异。

int, long,floatdouble其他代表数值。只是顺便说一句,这些值的内部(计算机)表示是二进制的——首先,它们表示“纯”数字。

“十进制”、“二进制”、“十六进制”、“八进制”和其他一些是数字的表示。完全相同的数字量可以表示为上述任何一种。 仅当必须将值“呈现”给人类或某些需要非本地表示的程序或设备时,表示才有意义。

为了创建其中一种表示形式,数值被转换为字符序列——0...9 表示十进制,0/1 表示二进制,0...F 表示十六进制,0...7 表示八进制。(而且,文斯,独立于特定的基数,可以在两位数之间插入一个“基数点”来创建小数值的表示。)

Oak,使用您正在使用的机制将包含在 an 中的数值转换int为“二进制”表示是聪明的,尽管容易出错且实用性通常有限。您正在利用数字量通常格式化为十进制的事实,因此如果您通过一种多项式处理数字,它将仅使用十进制数字 0 和 1 显示,因此将呈现二进制表示。然而,生成二进制表示的方式要少得多。

于 2014-05-11T02:30:43.167 回答
1

今天早上我设法弄清楚了,这就是我所做的:

                int tester;
                for (int i = 0; i<=3; i++){
                int multiplier = 1;
                    while (nDecimal[i]>0)
                    {
                        int remainder = nDecimal[i]%2;
                        nDecimal[i] = nDecimal[i]/2;
                        binary[i] = binary[i] +remainder*multiplier;
                        multiplier = multiplier * 10;
                    }}

这段代码的作用是循环遍历 nDecimal[] 数组值以将自身转换为 binary[]。nDecimal 数组中的每个“槽”都在十进制基数(Base-10)中,通过逐次除法(示例:http ://www.wikihow.com)转换为二进制基数(Base-2) /从十进制转换为二进制

我已将 awnser 发布到我的问题上,因为它将来可能对其他人有用

于 2014-05-11T11:09:29.727 回答