gpt4 book ai didi

vb.net - 将某些程序集转换为 VB.NET - SHR 运算符的工作方式不同?

转载 作者:行者123 更新时间:2023-12-01 11:59:14 25 4
gpt4 key购买 nike

好吧,这里有一个简单的问题

我正在研究一些汇编,并将一些汇编例程转换回 VB.NET

现在,在汇编中有一行代码我遇到了问题,假设如下:

EBX = F0D04080

然后下面一行被执行

SHR EBX, 4

这给了我以下内容:

EBX = 0F0D0408

现在,在 VB.NET 中,我执行以下操作

variable = variable >> 4

这应该给我相同的......但它略有不同,而不是值 0F0D0408 我得到 FF0D0408

那么这里发生了什么?

最佳答案

来自 >> operator 的文档:

In an arithmetic right shift, the bits shifted beyond the rightmost bit position are discarded, and the leftmost (sign) bit is propagated into the bit positions vacated at the left. This means that if pattern has a negative value, the vacated positions are set to one; otherwise they are set to zero.

如果您使用的是带符号的数据类型,F0B04080 有一个负号(位 1 开始),它被复制到左边的空出位置。

这不是 VB.NET 特有的东西,顺便说一下:variable >> 4 被翻译成 IL instruction shr ,这是一个“算术移位”并保留符号,与 x86 汇编指令 SHR 形成对比,后者是一个无符号移位。要在 x86 汇编程序中进行算术移位,可以使用 SAR

要在 VB.NET 中使用无符号移位,您需要使用无符号变量:

Dim variable As UInteger = &HF0D04080UI

UI type characterF0D04080 的末尾告诉 VB.NET 文字是一个无符号整数(否则,它将被解释为负符号整数并且赋值将导致编译时错误)。

关于vb.net - 将某些程序集转换为 VB.NET - SHR 运算符的工作方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3224911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com