如何在C#中使用&运算符?代码的翻译是否正确?

2023-12-02

C++ 中的“if(arg2 & 1)”行(arg2 是 DWORD)等于 C# 中的“if(arg2 & 1==0)”(arg2 是 Uint32),对吗?

我正在尝试将函数从 C++ 转换为 C#,但出现错误:

Operator '&' cannot be applied to operands of type 'uint' and 'bool'

如果您能进一步了解整个函数中是否有任何其他错误,我也将不胜感激。

C++

DWORD Func_X_4(DWORD arg1, DWORD arg2, DWORD arg3)
{
LARGE_INTEGER result = {1, 0};
LARGE_INTEGER temp1 = {0};
LARGE_INTEGER temp2 = {0};
LARGE_INTEGER temp3 = {0};
LARGE_INTEGER temp4 = {0};
for(int x = 0; x < 32; ++x)
{
    if(arg2 & 1)
    {
        temp1.LowPart = arg3;
        temp1.HighPart = 0;
        temp2.QuadPart = temp1.QuadPart * result.QuadPart;
        temp3.LowPart = arg1;
        temp3.HighPart = 0;
        temp4.QuadPart = temp2.QuadPart % temp3.QuadPart;
        result.QuadPart = temp4.QuadPart;
    }
    arg2 >>= 1;
    temp1.LowPart = arg3;
    temp1.HighPart = 0;
    temp1.QuadPart *= temp1.QuadPart;
    temp2.LowPart = arg1;
    temp2.HighPart = 0;
    temp3.QuadPart = temp1.QuadPart % temp2.QuadPart;
    arg3 = temp3.LowPart;
    if(!arg2)
        break;
}
return result.LowPart;
}

转换为 C#

LARGE_INTEGER 结构:

[StructLayout(LayoutKind.Explicit, Size = 8)]
public struct LARGE_INTEGER
{
    [FieldOffset(0)]
    public Int64 QuadPart;
    [FieldOffset(0)]
    public UInt32 LowPart;
    [FieldOffset(4)]
    public Int32 HighPart;
}

功能:

public static UInt32 X4(UInt32 arg1, UInt32 arg2, UInt32 arg3)
    {
        LARGE_INTEGER result = new LARGE_INTEGER();
        result.LowPart = 1;
        result.HighPart = 0;
        LARGE_INTEGER temp1 = new LARGE_INTEGER();
        LARGE_INTEGER temp2 = new LARGE_INTEGER();
        LARGE_INTEGER temp3 = new LARGE_INTEGER();
        LARGE_INTEGER temp4 = new LARGE_INTEGER();
        for (int x = 0; x < 32; ++x)
        {
            if (arg1 & 1 ==0)
            {
                temp1.LowPart = arg3;
                temp1.HighPart = 0;
                temp2.QuadPart = temp1.QuadPart * result.QuadPart;
                temp3.LowPart = arg1;
                temp3.HighPart = 0;
                temp4.QuadPart = temp2.QuadPart % temp3.QuadPart;
                result.QuadPart = temp4.QuadPart;
            }
            arg2 >>= 1;
            temp1.LowPart = arg3;
            temp1.HighPart = 0;
            temp1.QuadPart *= temp1.QuadPart;
            temp2.LowPart = arg1;
            temp2.HighPart = 0;
            temp3.QuadPart = temp1.QuadPart % temp2.QuadPart;
            arg3 = temp3.LowPart;
            if (arg2==0)
                break;
        }
        return result.LowPart;
    }

这是我还不确定的:

  1. C++ 中的 DWORD 是 UInt32 还是 C# 中的 Int32?
  2. if(整数&整数)意味着if(整数和整数==0)? //这就是我上面描述的错误所在的地方。
  3. if(!integer) 意味着 if(integer!= 0)?
  4. 为什么运算符 & 不能在 C# 中逻辑使用,这意味着它需要布尔值?
  5. "LARGE_INTEGER result = {1, 0}" 表示 result.lowpart 为 1,result.highpart 为 0 或 result.Quadpart = 1?

提前致谢!


你写的地方:

如果(arg1 和 arg2==0)

编译器理解:

if (arg1 & (arg2==0))

你应该写:

if ((arg1 & arg2) == 0)

这是 C++ 语句应转换为 C# 的方式:

if (arg2 & 1) // C++ (arg2 is DWORD)
if ((arg2 & 1) != 0) // C# (arg2 is Uint32)

或者,以更通用的方式:

if (Flags & FlagToCheck) // C++
if ((Flags & FlagToCheck) != 0) // C#

在 C/C++ 中,0 为 false,其他均为 true。

  1. 你应该检查DWORD的定义,它应该是(unsigned int),也就是C#中的UInt32
  2. if(integer&integer),在C/C++中的意思是“如果两个整数之间按位与的结果不为0”(0为假,其他为真)。
  3. if (!integer) 表示 if (integer == 0) (同样,0 为 false,其他均为 true)
  4. 在 C# 中,就像在 Java 中一样,我认为布尔值和数字是两个不同的东西,你只能在“if”语句中使用布尔值,如果你使用 int ,则没有隐式转换:它不会编译。
  5. 我会把这个留给其他人,我需要测试一下才能确定......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在C#中使用&运算符?代码的翻译是否正确? 的相关文章

  • 对于 Swift 中的计算器

    只是要警告你 我是 Swift 的新手 我仍在适应它的工作原理 我一直在尝试在课堂上完成这个计算器项目 问题是 我需要练习简化代码 现在 当按下数字按钮时 我将其保存在这样的数组中 IBAction func buttonPressed s
  • 对静态成员变量的未定义引用

    我有一个有静态成员的类 它也是我的程序中其他几个类的基类 这是它的头文件 ifndef YARL OBJECT HPP define YARL OBJECT HPP namespace yarlObject class YarlObject
  • C++ 返回值、引用、const 引用

    你能向我解释一下返回值 值引用和值常量引用之间的区别吗 Value Vector2D operator const Vector2D vector this gt x vector x this gt y vector y return t
  • 如何使用 ILoggerFactory 记录 Polly 的重试

    或者 如何从静态方法记录 From https github com App vNext Polly https github com App vNext Polly你有这样的例子 其中记录器神奇地可用 Policy Timeout 30
  • 使用 C++ 拆分“[常规设置]”格式的节字符串

    我是 C 新手 我想读取包含部分和键值对的 ini 文件 根据部分 我想读取相应键的值 首先 我想阅读方括号内的部分 请帮忙 谢谢 对于真正的 INI 文件解析 我强烈建议iniparser库 http ndevilla free fr i
  • 使用预编译头减少 clang 编译时间

    我正在开发一个数据库项目 该项目将查询 以某种高级语言表示 编译为 C 代码 这段代码由数据库编译并执行 那部分工作得很好 现在 我正在尝试减少 C 查询代码的编译时间 我想知道是否可以使用预编译头来提高性能 该查询被转换为一个名为 Que
  • 代码块 power 函数在 c 中不起作用

    我正在使用代码块来学习c 我的代码是 include
  • “包含字符串”的快速索引

    在我的应用程序中 我有多达数百万个短字符串 大部分短于 32 个字符 我想实现一个带有附加列表的搜索框 该列表仅包含包含在搜索框中输入的整个字符串的元素 如何预先建立索引来快速找到此类字符串 所有排序的 STL 容器都会检查整个字符串 对于
  • Confuser .NET 混淆器。安全吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我目前正在开发一个应用程序 其中阻止用户反编译代码非常重要 现在 我意识到 如果由经验丰富的程序员执行 大多数 exe 都是可反编译的
  • 有没有办法将 boost::json::serializer 切换为美化输出?

    Using boost json serializer如中的示例所示文档 快速查看 http vinniefalco github io doc json json usage quick look html以紧凑格式保存 json tre
  • WinForms - 表单大小错误

    我们有以下代码 private void MainForm Shown object sender EventArgs e RepositionForm private void RepositionForm Rectangle rect
  • C for 循环索引:新 CPU 中的前向索引更快吗?

    在我订阅的邮件列表上 两位知识渊博的 IMO 程序员正在讨论一些优化的代码 并说了以下内容 在 5 8 年前发布的 CPU 上 向后迭代 for 循环稍微快一些 e g for int i x 1 i gt 0 i 因为比较i归零比将其与其
  • 如何强制用户仅使用“new”创建从我派生的类的对象?

    为了实现引用计数 我们使用IUnknown http msdn microsoft com en us library ms680509 VS 85 aspx类接口和智能指针模板类 该接口具有所有引用计数方法的实现 包括Release vo
  • 只读有运行时开销吗?

    出于某种原因 我一直认为readonly字段有与其相关的开销 我认为这是 CLR 跟踪是否存在readonly字段是否已初始化 这里的开销是一些额外的内存使用量 用于跟踪状态以及分配值时的检查 也许我这么认为是因为我不知道readonly字
  • 非静态类中的静态方法和静态类中的静态方法有什么区别?

    我有两个班级A级和B级 static class ClassA static string SomeMethod return I am a Static Method class ClassB static string SomeMeth
  • 修改代码以从 Windows 中的 PE 可执行文件检索双重签名信息?

    我已经挣扎了一段时间想要修改这段代码示例 https support microsoft com en us help 323809 how to get information from authenticode signed execu
  • 如何在给定点停止线程?

    我试图停止一些线程 阅读一些有关优雅地执行此操作的正确方法的内容 但我一定做错了什么 因为它根本不起作用 起初我尝试不使用lock with IsRunning不稳定 然后尝试使用锁 这是我所拥有的 private volatile boo
  • 如何在 Winform DataGridView 中创建不同的单元格格式

    我有一个 DataGridView 我将其绑定到 DataTable DataTable 是一个全数字值 要求 DataGridView 中的每 n 行都包含文本 而不是数值 以便在视觉上为用户分隔部分 我很高兴在绑定后将此文本数据放入 D
  • 扔掉挥发物安全吗?

    大多数时候 我都是这样做的 class a public a i 100 OK delete int j Compiler happy But is it safe The following code will lead compilat
  • 如何从尖点库矩阵格式获取原始指针

    我需要从尖点库矩阵格式获取原始指针 例如 cusp coo matrix

随机推荐

  • 如何将 Excel 工作表导出为图像?

    我正在尝试从 Excel 工作表生成图像 经过大量研究后 我使用以下代码 但在某些时候我遇到了异常 using System using System Collections Generic using System Linq using
  • Flexslider 延迟加载 - 仅在真正需要时加载图像

    这实际上只是对 Flexslider 延迟加载的回答的后续内容here我正在使用我在下面粘贴的代码 我想更改它 以便仅在真正需要时加载图像 我尝试了其他 Flexslider 属性 之前 和之后 但它们在第一张幻灯片上造成了延迟 请问我可以
  • 如何使用 WSO2 ESB 从数据库检索多行?

    我想使用 wso2 esb 检索数据库中的多行 使用 dblookup 中介器我只能检索一行 建议使用 WSO2 DSS 你能帮我使用 DSS 完全检索 ESB 中的多行吗 Thanks 如果您不想使用 DSS 这就是我们的情况 那么您可以
  • React js组件,map可以工作,foreach不行

    我有一个呈现标签的组件 它循环遍历地图并显示数据 我尝试使用 forEach 但它不起作用 但是 如果我将映射转换为数组 它就可以工作 foreach 也不适用于数组 我在这里缺少什么 这有效 render return div class
  • 重命名模型和关系字段的 Django 迁移策略

    我计划重命名现有 Django 项目中的多个模型 其中有许多其他模型与我要重命名的模型具有外键关系 我相当确定这将需要多次迁移 但我不确定确切的过程 假设我从 Django 应用程序中的以下模型开始 名为myapp class Foo mo
  • Zoom:1;有什么bug在 CSS 中修复?

    我见过人们应用 CSS 属性zoom 1 在 HTML 元素上 他们为什么这样做 它修复了什么错误 这提供了一个称为hasLayout在 Internet Explorer 版本 7 及更低版本中 关于这个主题的权威文章在这里 http w
  • 在 iPhone 应用程序启动期间(即应用程序加载期间)播放电影文件

    我想播放电影文件或任何动画文件 直到时间应用程序未完全加载 有什么简单的方法可以做到吗 告诉别人他们想做什么是值得怀疑的 我的客户想要播放一部电影 而这只是一部 3 秒的电影 这就是所谓的品牌推广 如果他的用户不喜欢它 他们会告诉他
  • QT QImage - 将图像的一部分复制为多边形

    尝试将图像的一部分复制为多边形 特别是五边形 但我更感兴趣的是如何复制为除矩形之外的任何内容 以下代码仅允许复制为矩形 QImage copy const QRect rect QRect const inline QImage copy
  • AWS Fargate - 不使用 SES 端点从私有子网发送电子邮件

    我有一个带有自动缩放 Fargate 容器的配置 在公共子网配置或 NAT 配置中使用 SES 简单电子邮件服务时 电子邮件可以正确发送 当容器移动到具有 SES 端点接口的私有子网时 不再发送电子邮件 以下两个带有连接超时消息的选项 对于
  • 如何制作一组列表

    我有一个这样的列表 i 1 2 3 2 4 5 1 2 3 2 4 5 我想获得一个包含 唯一 列表 基于其元素 的列表 例如 o 1 2 3 2 4 5 我无法使用set 因为列表中有不可散列的元素 相反 我正在这样做 o for e i
  • 从 jBPM 流程访问数据库

    如何从 jBPM 流程访问数据库 您认为我可以使用脚本任务或人工任务的进入 退出操作连接到数据库吗 我建议不要使用人工任务的进入 退出操作来存储代码 弄清楚您将代码放在哪里可能是一场噩梦 因为当人工任务有代码时没有视觉线索 您可以尝试脚本任
  • Grails 限制表创建

    我想使用 Grails 功能在有限的基础上创建 更新数据库表 具体来说 我希望 Grails 管理一些表 但不是全部 有没有办法限制 Grails 管理的表 或者这是一个全有或全无的提议 一般来说 要么全有 要么全无 因为 Grails 使
  • 缓慢的 Skscene 过渡

    我有两个场景 家庭和玩耍 与到家庭场景的转换相比 到游戏场景的转换确实很慢 我想这是因为我的游戏场景中有更多的事情发生 有什么方法可以预加载播放场景吗 或者让过渡更加无缝 我对这个论坛的答案感兴趣预加载场景以防止延迟 但我不知道从哪里开始
  • 在控制器中为每个 RequestMapping 不同地配置 FAIL_ON_UNKNOWN_PROPERTIES

    我想在不同的设备上以不同的方式处理 json 到对象的转换 RequestMapping在我的控制器中 我相信 如果我们在 spring boot 项目中添加 Jackson 依赖项 它会处理 json 到对象的转换 spring jack
  • 如何使用 jaro-winkler 查找表中最接近的值?

    我的数据库中有一个 jaro winkler 算法的实现 这个函数不是我写的 该函数比较两个值并给出匹配的概率 所以 jaro string1 string2 matchnoofchars 将返回结果 我不想比较两个字符串 而是想发送一个带
  • Jenkins 插件的 Spring-core 依赖版本错误

    我正在尝试制作一个使用的 Jenkins 插件需要 spring core 3 2 2 的库 cloudfoundry client lib 我只是使用 mvn 命令创建一个框架插件 然后将 Maven 依赖项添加到 pom xml 以及一
  • 将 numpy 开放网格转换为坐标

    我想将 numpy ix 例程返回的开放网格转换为坐标列表 eg for In 1 m np ix 0 2 4 1 3 In 2 m Out 2 array 0 2 4 array 1 3 我想要的是 0 1 0 3 2 1 2 3 4 1
  • 使用 Maven Surefire 运行依赖项 jar 中包含的 JUnit 测试

    我的 Maven 存储库中有一个 jar 其中包含 junit 测试 它应该在不同的项目中运行 因为它能够检查项目并测试其某些功能 不幸的是 surefire 不会拾取罐子中包含的测试 因为这功能请求显示 在功能请求中 他们建议解压 jar
  • ENTITY 声明可以嵌套在引用的 XML 文件中吗?

    我正在处理一个相当大的 DocBook XML 文档 主书有章节 但通过使用实体引用包括所有小节 像这样的事情 main book xml
  • 如何在C#中使用&运算符?代码的翻译是否正确?

    C 中的 if arg2 1 行 arg2 是 DWORD 等于 C 中的 if arg2 1 0 arg2 是 Uint32 对吗 我正在尝试将函数从 C 转换为 C 但出现错误 Operator cannot be applied to