在C++中,1和1i64有什么区别?

2024-03-22

我正在将一些 32 位兼容代码转换为 64 位 - 但我遇到了障碍。我正在编译 VS2008 x64 项目,并且收到以下警告:

warning C4334: '<<' : result of 32-bit shift implicitly converted to 64 bits
(was 64-bit shift intended?)

这是原始代码行:

if ((j & (1 << k)) != 0) {

如果我遵循的话,这就是它的样子微软的建议 http://msdn.microsoft.com/en-us/library/ke55d167.aspx:

if ((j & (1i64 << k)) != 0) {

当代码在 32 位和 64 位系统上编译时,这样做安全吗?如果是这样,请解释为什么我必须在末尾添加“i64”,以及为什么这不会影响 32 位编译。否则,我们将非常感谢解决方法。

除此之外,我还有一些看起来更棘手的代码。

if (id[j] != id[j ^ (1u << k)]) {

我知道“u”意味着该数字是无符号的,但是在不超过有符号最大值的值上指定这一点有什么意义......我猜这与位移位有关?


1有类型int根据 C++ 标准。在 64 位 Microsoft 编译器上intsizeof = 4 字节,这意味着int是32位变量。1i64有类型__int64.

当您使用移位运算符时,结果的类型与左操作数的类型相同。这意味着转移1你会得到 32 位结果。 Microsoft 编译器假定它可能不是您所期望的(在 64 位平台上)并给出警告消息。

当你使用1i64结果在两个平台上均为 64 位。j and 0将隐式转换为 64 位。因此整个表达式将在 64 位变量中计算,结果将是bool.

所以使用1i64在两个 (32/64) 平台上都是安全的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在C++中,1和1i64有什么区别? 的相关文章

  • 如何在MVVM中管理多个窗口

    我知道有几个与此类似的问题 但我还没有找到明确的答案 我正在尝试深入研究 MVVM 并尽可能保持纯粹 但不确定如何在坚持模式的同时启动 关闭窗口 我最初的想法是向 ViewModel 发送数据绑定命令 触发代码来启动一个新视图 然后通过 X
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • 获取按下的按钮的返回值

    我有一个在特定事件中弹出的表单 它从数组中提取按钮并将标签值设置为特定值 因此 如果您要按下或单击此按钮 该函数应返回标签值 我怎样才能做到这一点 我如何知道点击了哪个按钮 此时代码返回 DialogResult 但我想从函数返回 Tag
  • 将数组向左或向右旋转一定数量的位置,复杂度为 o(n)

    我想编写一个程序 根据用户的输入 正 gt 负 include
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • 如何将图像和 POST 数据上传到 Azure 移动服务 ApiController 终结点?

    我正在尝试上传图片and POST表单数据 尽管理想情况下我希望它是json 到我的端点Azure 移动服务应用 我有ApiController method HttpPost Route api upload databaseId sea
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • 将 xml 反序列化为类,list<> 出现问题

    我有以下 XML
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 将文本叠加在图像背景上并转换为 PDF

    使用 NET 我想以编程方式创建一个 PDF 它仅包含一个背景图像 其上有两个具有不同字体和位置的标签 我已阅读过有关现有 PDF 库的信息 但不知道 如果适用 哪一个对于如此简单的任务来说最简单 有人愿意指导我吗 P D 我不想使用生成的
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 防止索引超出范围错误

    我想编写对某些条件的检查 而不必使用 try catch 并且我想避免出现 Index Out of Range 错误的可能性 if array Element 0 Object Length gt 0 array Element 1 Ob

随机推荐

  • Visual C++ - 匿名方法

    你好 有没有办法在 Visual C 中使用匿名方法 Visual C 2010 supports C 0x lambda expressions 1 which can be used as anonymous functions int
  • 如何在 Spring Boot 中使用 Tomcat RemoteIpFilter

    客观的 获取用户的远程地址 即request getRemoteAddr 在 Spring Boot Web 应用程序中 介绍 众所周知 getRemoteAddr方法返回直接调用者的地址 该调用者可能是代理服务器或原始用户和最终目标服务器
  • Mockito 根据参数的属性返回值

    通常当使用 Mockito 时我会这样做 Mockito when myObject myFunction myParameter thenReturn myResult 是否可以按照以下方式做一些事情 myParameter setPro
  • Maven Release Plugin - 准备创建快照版本而不是发布版本的标签

    我有以下项目结构 framework 框架 父 pom 框架的东西 在framework parent pom的pom xml中我定义了以下插件
  • 配置log4net根据日志级别写入不同的文件

    我正在设置 log4net 并希望在 debug log 中写入调试消息 在 info log 中写入信息消息等 为此 我使用了几个附加程序 例如
  • Java Applet的安全警告提示

    从 JRE 1 7 update 55 开始 在某些情况下 并非总是如此 特别是如果我通过主机名而不是 IP 调用应用程序 即使我选中 不再显示此消息 也会始终显示安全警告 清单已根据最新指令修复 UPDATE 调查 JRE 安全日志时 我
  • vhdl中process语句的顺序执行

    对于vhdl中的process语句 据说process语句内部的执行顺序是连续的 我的问题是 请先看下面的代码 a b和c信号在进程语句中的if语句中是同时还是顺序分配给它们的新值 process clk is begin if risin
  • MySql:插入一行并获取内容

    是否可以插入一行并获取在同一查询中插入的值 就像是 INSERT INTO items item number state SELECT 3 number state FROM item bug WHERE id 3 然后 获取ID并执行
  • return 语句中两种不同的括号语法

    我正在关注 ReactJS 入门教程 https scotch io tutorials learning react getting started and concepts https scotch io tutorials learn
  • 如何让 Google 字体在 IE 中工作?

    我一直在开发一个使用谷歌字体 API https code google com apis webfonts 它很棒 据说已经在 IE 中进行了测试 但是在 IE 8 中测试时 字体根本没有样式化 我包括了谷歌的字体指示 http code
  • Cuda和pytorch内存使用情况

    我在用Cuda and Pytorch 1 4 0 当我尝试增加batch size 我遇到以下错误 CUDA out of memory Tried to allocate 20 00 MiB GPU 0 4 00 GiB total c
  • TfidfVectorizer.fit_transfrom 和 tfidf.transform 之间有什么区别?

    在 Tfidf fit transform 中 我们仅使用参数 X 而没有使用 y 来拟合数据集 这是正确的吗 我们仅为训练集的参数生成 tfidf 矩阵 我们没有使用 ytrain 来拟合模型 那我们如何对测试数据集进行预测呢 https
  • 如何以编程方式禁用 TextView maxLines?

    我很难重置maxLines的属性TextView以编程方式 刚刚尝试设置为0但它不起作用 1使应用程序崩溃 我可以使用更简单的解决方法并设置maxLines to 5000但我不想那样做 有什么想法如何做到这一点吗 UPDATED 好吧 我
  • Android 首选项屏幕布局

    我的应用程序中有以下首选项屏幕
  • Android P 中调用服务的 AlarmManager:startForegroundService

    我正在使用 AlarmManager 如下所示 它在 Android O 及以下版本中运行良好 AlarmManager mgr AlarmManager context getSystemService Context ALARM SER
  • NumPy ndarray 的三元运算符?

    NumPy 有三元运算符吗 例如 在 R 中 有一个向量化的if else功能 gt ifelse 1 10 lt 3 a b 1 a a b b b b b b b b NumPy 中有类似的东西吗 您正在寻找numpy where ht
  • File.renameTo() 没有任何效果

    我希望能够重命名文件夹列表 以便删除不需要的字符 例如 点和双空格必须变成单个空格 单击 GUI 中的按钮后 您将看到一个带有正确格式名称的消息框 这表明格式正确并且函数被调用 当我查看我创建的测试文件夹时 名称没有更改 即使刷新后也没有更
  • 在 haskell 中将整数列表转换为一个 Int (如 concat)

    和标题说的差不多 我有一个整数列表 如下所示 1 2 3 我想将其更改为整数 123 我的第一个想法是 concat 但这不起作用 因为它的类型错误 我尝试了各种方法 但通常最终只是返回相同的列表 非常感谢任何帮助 另外 我已经找到了一种打
  • Java:如何在枚举中使用构造函数重载?

    我正在使用 Java 中的枚举 正如我所看到的 可以重载枚举构造函数 我的问题是 在这种情况下 是否有可能从构造函数重载中受益 因为据我所知 既不可能自己调用 它 也不可能强制编译器调用您想要调用的特定构造函数 感谢您花时间向我澄清这些内容
  • 在C++中,1和1i64有什么区别?

    我正在将一些 32 位兼容代码转换为 64 位 但我遇到了障碍 我正在编译 VS2008 x64 项目 并且收到以下警告 warning C4334 lt lt result of 32 bit shift implicitly conve