使用十六进制/十进制数进行计算

时间:2014-02-06 13:12:49

标签: java

我有一个相当简单的方法naf

public int naf(int NN, int AA, int FF, int Q) {

    int mike = FF + 0x20 * AA + 0x200 * NN;

    if (Q == 1) {
        mike += 0x4000;
    }
    return mike;
}

我可以理解这个方法接受4个整数并返回一个整数。在第二行,计算有点令人困惑。我觉得0x部分与十六进制数字格式有关,但输入参数是十进制的。我也觉得0x可能会使这些计算变得可行,但我不确定。

当输入为十进制时,0x提供什么以及该方法如何进行十六进制计算?

4 个答案:

答案 0 :(得分:2)

没有十六进制计算这样的东西 你有一个整数表达式,只是在它中 两个数字以十六进制格式表示。

这个

int mike = FF + 0x20*AA + 0x200 * NN;

与:

相同

int mike = FF + 2 * 16 * AA + 2 * 16 * 16 * NN;

与:

相同

int mike = FF + 32 * AA + 512 * NN;

答案 1 :(得分:2)

对于计算机而言,无论数字如何呈现给您,无论是十进制(基数为10,我们自然熟悉),十六进制(基数为16),八进制(基数为8),二进制(基数为2) ),你的名字(虽然在Java中只有八进制,十进制和十六进制可以开箱即用)。在内部,它们都存储为二进制数,即一系列零和一。

在您的代码中,您可以自由选择最适合的格式。默认情况下,Java编译器假定您正在为它提供十进制数字,但是通过在数字前加上0x或仅为0,您可以告诉它将它们分别解释为十六进制或八进制数。

我建议您尝试阅读数字系统。

答案 2 :(得分:1)

java中的整数文字可以是十进制(例如32),十六进制(例如0x20)和八进制(例如040)的形式。差异为十进制:无前缀,十六进制:前缀0x和八进制:前缀0

因此,

int mike = FF + 0x20 * AA + 0x200 * NN;

真的只是

int mike = FF + 32 * AA + 512 * NN;

哦,FF也是“十六进制形式”的事实根本不重要,它只是一个方法参数,可能也被称为steven ...: - )< / p>

干杯,

答案 3 :(得分:1)

十进制或十六进制仅适用于表达文字,例如:

int a = 0xfa; // hexadecimal notation for literal on the right hand side
int b = 251; // decimal notation for the literal on the right hand side

一旦将值存储在变量中,系统就不关心您是否使用十进制或十六进制表示法来表示您存储的值:

int c = a + b; // numbers are added, regardless of you they were expressed above