有人可以解释这个程序的输出吗?

时间:2009-01-20 05:34:05

标签: c#

有人可以解释为什么这个程序输出0x00000004?

class AndAssignment
{
    static void Main()
    {
        int a = 0x0c;
        a &= 0x06;
        Console.WriteLine("0x{0:x8}", a);
    }
}
/*
Output:
0x00000004 

*/

5 个答案:

答案 0 :(得分:14)

0x0c = 1100二进制中 0x06 = 0110二进制
&安培; operation是一个二进制AND,如果在两个操作数中设置,则将其设置为1,因此:
0x0c& 0x06 = 1100& 0110 = 0100 = 0x04
您可以使用Windows计算器查看整数是如何以不同的形式呈现的(在您的情况下为十六进制和二进制)。 More info

答案 1 :(得分:1)

也许这article at Wikipedia可以帮助您理解。

答案 2 :(得分:1)

另外,Windows计算器可以在hex / bin / oct和十进制值之间进行转换

答案 3 :(得分:0)

您必须了解从数字库转换的基础知识。小数是基数10.二进制是基数2.十六进制是16的基数。

请查看下表中的十六进制:

16^0 = 1
16^1 = 16
16^2 = 256
16^3 = 4096

十六进制具有以下数字:1,2,3,4,5,6,7,8,9,a,b,c,d,e,f。

所以你有:0C十六进制,或只有C.

16^0 x c (or 12) = 12 in decimal.
16^1 x 0 = 0

现在将12十进制转换为二进制。我只是想告诉你一些简单的小数字加法模式:

2^0 = 1
2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16

所以要使二进制12,你需要一组(2 ^ 3)和一组(2 ^ 2)。因此你有

1100.

如果你将它转换为十进制就像你使用十六进制一样,你最终会得到12。

0 x 2^0 = 0
0 x 2^1 = 0
1 x 2^2 = 4
2 x 2^3 = 8

total = 12.

答案 4 :(得分:0)

Sara,他正在十六进制和二进制之间进行转换。读一读:
http://www.purplemath.com/modules/numbbase.htm

C(十六进制)= 12(十进制) 1100(二进制)= 12(十进制)