【问题标题】:Convert VBA bitwise operator to C#将 VBA 位运算符转换为 C#
【发布时间】:2018-05-05 01:05:52
【问题描述】:

我在 VBA 中有一个按位运算,现在我想将其转换为 C#。

我尝试使用 C# 位运算符进行转换,但没有得到结果。

VBA 位运算

Bit1 = (Var1 And 2 ^ 14) Or (Var1 And 2 ^ 15)

C# 位运算

var Bit1 = (bitvalue >> 14) | (bitvalue >> 15);

由于 VBA 没有位移运算符,我们使用 2^places 进行右移,而在 C# 中,我们可以简单地使用 >> 作为右移运算符,但这并没有给我在 VBA 中得到的结果。可能是什么原因?

这是我的完整 C# 函数,它在 VBA 中类似:

public void bitcalc()
{


    var Bit1 = (bitvalue >> 14) | (bitvalue >> 15);
    if (Bit1 == 16384) getISO15031BitsLetter = "C";

    else if (Bit1 == 32768) getISO15031BitsLetter = "B";


    else if (Bit1 == 49152) getISO15031BitsLetter = "U";


    else getISO15031BitsLetter = "P" ;


}

【问题讨论】:

  • 嗯,那不是 VB.NET。那似乎是 C#。
  • "现在我想将其转换为 Vb.net--C#" - VB.NET 和 C# 不是一回事,以防您不这么认为。
  • 感谢您指出 Vb.net 和 C# 不一样...... :) 快速谷歌搜索指出 C# 是 .Net 的一种风格......所以 C# 是基于 .NET框架
  • VB.NET 和 C# 都基于 .NET Framework(因此 ".NET"-部分在 VB.NET 中),但是它们的语法和语言结构不同。

标签: c# vba bitwise-operators bit-shift


【解决方案1】:

您的原始代码不会改变输入。它只是掩盖它。直接翻译可以是:

var Bit1 = (Var1 & (1 << 14)) | (Var1 & (1 << 15));

这有多种变化。例如,您可以同时屏蔽这两个位:

var Bit1 = (Var1 & (3 << 14)); // decimal 3 is binary 11

【讨论】:

  • 谢谢...两种变体都有效。在发布之前,我曾尝试使用 1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 1970-01-01
  • 2012-12-15
  • 2023-03-31
  • 1970-01-01
  • 2011-10-28
  • 2012-01-27
相关资源
最近更新 更多