Rus*_*ail 9 c# hex bitwise-operators
我对按位运算符有一个非常基本的了解.然而,我无法理解如何分配价值.如果有人能指出我正确的方向,我将非常感激.
我的十六进制地址:0xE0074000
十进制值:3758571520
二进制值:11100000000001110100000000000000
我正在尝试编写一个简单的微控制器并使用Microsoft .Net Micro Framework中的Register访问类来使Controller执行我想要的操作.
Register T2IR = new Register(0xE0074000);
T2IR.Write(1 << 22);
在上面的例子中,二进制表示中的位如何移动?我不明白如何以二进制形式将位管理分配给地址.
如果有人能指出我正确的方向,我会非常感激.
Ber*_*nDK 13
忘记开始的小数.你稍后会回到那里.
首先,您需要查看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)
较低的蚕食也是如此.
你看到了这种模式吗?
请参阅@BerggreenDK 的回答,了解什么是转变。这里有一些关于十六进制的信息(同样的事情,只是不同的表示):
移位是一个非常容易理解的概念。寄存器的大小是固定的,任何不适合的位都从末尾掉下来。所以,拿这个例子:
int num = 0xffff << 16;
你的十六进制变量现在是0xffff0000. 注意右端是如何填充零的。现在,让我们再换一次。
num = num << 8;
num = num >> 8;
num现在是0x00ff0000。你不会拿回你的旧物。这同样适用于右移。
技巧:左移 1 就像数字乘以 2,右移 1 就像整数除以 2。