2014-02-06 113 views
2

我有相当简单的方法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要约和方法如何能够使十六进制的计算,当输入小数点?

+3

十六进制和十进制只是两种方式代表一个数字,它不会改变实际的计算。 –

+1

这是所有二进制到最后我的好人。 – christopher

+0

'0x'只是一种编写十六进制数字的方法。 '0xa'和'10'是相同的数字,并且可以在两者上进行相同的计算。 – Trenin

回答

1

整数常量可以是十进制的形式(例如。 32),十六进制(例如,0x20)和八进制(例如040)。不同之处为十进制:无前缀,十六进制:前缀0x和八进制:前缀0

因此,

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

真的只是

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

哦,事实上,FF也是“十六进制形式”上不会在所有问题,它只是一个方法参数和可能也被称为steven ... :-)

干杯,

2

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

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

相同:

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

这是相同的:在Java

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

+1

我认为是相反的 - 因为所有的计算机计算都是二进制的,所以没有像十进制计算那样的想法。十六进制和十进制只是向用户表示这些数字的方法。 – Trenin

+0

@Trenin我没有提到任何地方的小数计算。我写了'整数计算',后来我改成'整数表达式'。 –

2

对于计算机来说,数字是如何呈现给你的并不重要,可以是十进制数(基数为10,正如我们自然熟悉的),十六进制数(基数为16),八进制数(基数为8),二进制数(基数为2),你可以命名它(尽管在Java中只有八进制,十进制和十六进制是可能的)。在内部,它们都被存储为二进制数字,这是一系列的零和一个。

在你的代码可以自由选择你觉得最舒服的格式。默认情况下,Java编译器假定你正在输入它的十进制数字,但是通过在0x或0之前加上数字前缀,你可以告诉它们分别将它们解释为十六进制或八进制数字。

我建议你尝试在数字系统读了。

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 
+0

非常感谢您的回答!如果我想打印出c,输出结果是什么? – Thanos

+0

如果我正确地得到它System.out.println(“c =”+ c);应该给你502,这是251 + 251,这是251 + 0xfa。十六进制表示法中的0xfa与十进制表示法中的251相同。 –

+0

对不起,0xfa实际上是250,所以c将是501或251 + 250或251 + 0xfa。我并不总是在我的脑海中获得正确的转换。 –