如何按位操作十六进制值
本文关键字:十六进制 位操作 何按 | 更新日期: 2023-09-27 18:36:40
我对按位运算符有非常基本的了解。但是,我不明白如何分配值。如果有人能指出我正确的方向,我将不胜感激。
我的十六进制地址:0xE0074000
十进制值:3758571520
二进制值:11100000000001110100000000000000
我正在尝试编写一个简单的微控制器,并使用Microsoft.Net Micro框架中的注册访问类来使控制器执行我希望它执行的操作。
Register T2IR = new Register(0xE0074000);
T2IR.Write(1 << 22);
在我上面的例子中,二进制表示中的位是如何移动的?我不明白如何将位的管理分配给二进制形式的地址。
如果有人能指出我正确的方向,我会非常高兴。
首先忘记小数。你稍后会回到这个问题。
首先,您需要查看十六进制和二进制之间的逻辑。
好的,对于一个字节,你有 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。