如何在C#中实现返回布尔结果的位逻辑数学运算 解决VB.NET代码迁移问题
错误代码问题拆解
你的错误写法存在两处核心问题:
- 运算逻辑错误:VB代码中
bt(x) And 2 ^ y是先对两个整数做位与运算,再自动将非零结果转为True、零结果转为False。而你的错误写法是先把两个操作数各自转为布尔值再做逻辑与,完全偏离了原有的位运算逻辑。 - 幂运算实现错误:C#中
^符号是异或运算不是幂运算,你用的Math.Pow是浮点运算,不仅性能低还可能存在精度问题,整数场景下应该用位左移1 << y实现2的y次方计算。
正确的C#实现代码
public BitArray createBigEndianBitArray(byte[] bt) { bool[] boolAra = new bool[bt.Length * 8]; int cur_index = 0; for (int x = 0; x < bt.Length; x++) { for (int y = 7; y >= 0; y--) { // 位与后判断结果是否非零,和原VB逻辑完全一致 boolAra[cur_index] = (bt[x] & (1 << y)) != 0; cur_index++; } } return new BitArray(boolAra); }
逻辑说明
- 原VB代码的自动类型转换逻辑完全通过
!= 0复现,和原生位运算的执行结果完全对齐 - 用位左移计算2的整数次幂,是整数运算无精度问题,性能更高
- 变量声明简化为在for循环内定义,符合C#代码规范,逻辑和原VB完全一致
内容的提问来源于stack exchange,提问作者user1732364
相关产品推荐
相关产品推荐

