使用位操作将十六进制转换为十进制
Hex to Dec using bit-manipulation
有人能解释一下这是如何实际工作的吗?例如char input = 'a'
。我理解<lt;将位移四位(对于一个以上的字符)。但是为什么在第二部分加9呢?我知道0xf=15……我是不是遗漏了一些显而易见的东西。
result = result << 4 | *str + 9 & 0xf;
到目前为止,我的理解是:
char input='a'ascii值为97。加9等于106,二进制中的106等于01101010。0xf=15(00001111),因此01101010&00001111=00001010,这给出了值10,然后将结果附加到结果上。
提前谢谢。
首先,让我们用括号重写它,使操作顺序更加清晰:
result = (result << 4) | ((*str + 9) & 0xf);
如果result
在输入时为0,则我们有:
result = (0 << 4) | ((*str + 9) & 0xf);
简化为:
result = (0) | ((*str + 9) & 0xf);
再次发送至:
result = (*str + 9) & 0xf;
现在让我们来看看a
-f
:的十六进制和二进制表示
a = 0x61 = 01100001
b = 0x62 = 01100010
c = 0x63 = 01100011
d = 0x64 = 01100100
e = 0x65 = 01100101
f = 0x66 = 01100110
在添加9之后,& 0xf
操作会清除前4位,所以我们不需要担心这些。所以我们实际上只是在较低的4位上加9。在a
的情况下,较低的4位是1
,所以加9可以得到10
,其他的也一样。
正如chux在评论中提到的,实现这一目标的更直接的方法如下:
result = *str - 'a' + 10;
相关文章:
- visual在c++中将十进制数转换为二进制数
- C++十进制到二进制,如何转换
- C++从二进制转换为十进制数
- 我编写了代码将十进制分数转换为其二进制等效数.它编译得很好,但在执行时挂起
- 将分数转换为十进制数并对其进行排序
- 将字符串(可以是十进制字符串或十六进制字符串)转换为整数C++
- 十进制到二进制转换器 c++
- 如何在C ++中将二进制字符串128位转换为十进制字符串?
- 将二进制转换为十进制,我如何要求用户仅输入二进制
- 我正在尝试编写将 ASCII 转换为十进制、添加并转换回 ASCII 的软件
- 如何将QBytearrayBCD转换为十进制QString表示
- C++:二进制到十进制w/转换过程的外观
- 十六进制到十进制转换的未清理答案
- 如何在C++中将二进制编码十进制转换为 int
- 如何将带有浮点数的字符串转换为十进制?
- 如何使用链表将负十进制数转换为二进制?
- 将字符指针中的十六进制转换为十进制
- 使用 std::hex 将十六进制转换为十进制
- 十进制,包括负到 32 位二进制转换器
- 使用动态比特斯转换十进制数字