如何按位操作十六进制值?

时间:2012-06-10 22:29:29

标签: c# bitwise-operators hex

我对按位运算符有一个非常基本的了解。然而,我无法理解如何分配价值。如果有人能指出我正确的方向,我将非常感激。

我的十六进制地址:0xE0074000

十进制值:3758571520

二进制值:11100000000001110100000000000000

我正在尝试编写一个简单的微控制器并使用Microsoft .Net Micro Framework中的Register访问类来使Controller完成我想要的操作。

Register T2IR = new Register(0xE0074000);
T2IR.Write(1 << 22);

在上面的例子中,二进制表示中的位如何移动?我不明白如何以二进制形式将位管理分配给地址。

如果有人能指出我正确的方向,我会非常感激。

2 个答案:

答案 0 :(得分:12)

忘记开始的小数。你稍后会回到那里。

首先,你需要看到HEX和BINARY之间的逻辑。

好的,对于一个字节,你有8位(#7-0)

#7 = 0x80 = %1000 0000
#6 = 0x40 = %0100 0000
#5 = 0x20 = %0010 0000
#4 = 0x10 = %0001 0000

#3 = 0x08 = %0000 1000
#2 = 0x04 = %0000 0100
#1 = 0x02 = %0000 0010
#0 = 0x01 = %0000 0001

当您以二进制形式读取时,以字节为单位,例如%00001000

然后位设置,是右边的第4位#3,其值为08十六进制(实际上也是十进制,但是当你计算出十六进制/二进制时仍然忘记了十进制)

现在,如果我们有二进制数%10000000 这是#7位开启。它的十六进制值为0x80

所以你要做的就是在“半字节”中总结它们(十六进制字节的每个部分被一些极客称为半字节)

半字节中的最大值是(十进制)15或F为0x10 + 0x20 + 0x40 + 0x80 = 0xF0 =二进制%11110000

所以所有灯都打开(4位)半字节= F十六进制(十进制15)

同样适用于较低的半字节。

你看到了模式吗?

答案 1 :(得分:4)

请参阅@ BerggreenDK关于转变的答案。这里有一些关于它在十六进制中的含义的信息(同样的,只是不同的表示):

移位是一个非常简单的概念。寄存器具有固定的大小,并且任何不适合的位都会丢失。所以,举个例子:

int num = 0xffff << 16;

您的十六进制变量现在为0xffff0000。注意右端是如何用零填充的。现在,让我们再次改变它。

num = num << 8;
num = num >> 8;

num现在是0x00ff0000。你没有得到你的旧位。这同样适用于右移。

技巧:向左移动1就像将数字乘以2一样,右移1就像将整数除以2一样。