有人可以解释为什么这个程序输出0x00000004?
class AndAssignment
{
static void Main()
{
int a = 0x0c;
a &= 0x06;
Console.WriteLine("0x{0:x8}", a);
}
}
/*
Output:
0x00000004
*/
答案 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(十进制)