如何设置 Short 中的任何单个位

发布于 2024-11-03 21:42:56 字数 179 浏览 0 评论 0原文

如果 VB.NET 中的 varShort 是 Short,并且 varBit 是 0 到 15 之间的值,那么如何设置 varShort 中由 varBit 标识的位,而不干扰 varShort 中的任何其他位?

当然,我的问题是最高有效位,即位 15。由于 varBit 是在运行时确定的,因此该解决方案必须适用于任何位数。

If varShort in VB.NET is a Short and varBit is a value from 0 to 15, how can I set the bit in varShort identified by varBit without disturbing any of the other bits in varShort?

My problem, of course, is with the most significant bit, bit 15. Since varBit is determined at runtime, the solution must work with any bit number.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鯉魚旗 2024-11-10 21:42:56

您可以使用位移运算符 << ;>>> ,打开你想要的位(并将这个值放入varValue中),然后按位或varShortvarValue

那里这个问题中提供了有关 VB.NET 中位移运算符的信息

You can use the bitshift operators, << and >>, to turn on the bit you want (and put this value in varValue), and then bitwise Or varShort and varValue

There is information in this question about the bitshift operators in VB.NET

瀞厅☆埖开 2024-11-10 21:42:56

设置 Short 的第十六位将导致溢出异常,因为 Short 是一种签名类型。您是否有任何理由不使用未签名的对应 UShort

编辑

如果您确实想坚持使用Short,此函数将设置第十六位:

Function setNthBit(ByVal number As Short, ByVal bit As Short) As Short
    Dim mask As UShort
    mask = 2 ^ bit
    If mask > Short.MaxValue Then
        Return (Short.MinValue + number) Or mask
    Else
        Return number Or mask
    End If
End Function

Setting the sixteenth bit of a Short will cause an overflow exception because Short is a signed type. Do you have any reason not to use the unsigned counterpart UShort?

Edit

If you really want to stick with Short, this function will set the sixteenth bit:

Function setNthBit(ByVal number As Short, ByVal bit As Short) As Short
    Dim mask As UShort
    mask = 2 ^ bit
    If mask > Short.MaxValue Then
        Return (Short.MinValue + number) Or mask
    Else
        Return number Or mask
    End If
End Function
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文