草庐IT

syswow64

全部标签

C++ 为什么按位运算符 ~ 在 uint64_t 和 uint8_t 上返回不同的类型?

#include#includeintmain(){usingnamespacestd;uint64_ta=3;if(uint64_t(~a)==(~a))cout~uint8_t返回int值,但~uint64_t返回uint64_t。这是未定义的行为吗? 最佳答案 发布自en.cppreferenceTheresultofoperator~isthebitwiseNOT(one'scomplement)valueoftheargument(afterpromotion).Integralpromotion适用于char,short

c++ - 为什么在我的 64 位机器上 double 和 long double 完全一样?

这个问题听起来像是针对初学者的,但是当我发现这个问题时,我想我要么是初学者,要么我的comp缺少一些东西:intmain(){cout程序输出:881515我以为longdouble是10个字节,有18个十进制数字,而double是8个字节,有15个数字,但看来我错了。为什么会这样?在64位机器上使用MSVC2010。 最佳答案 如您所知,在MSVC++中,longdouble是double的同义词。显然这是为了利用仅限于64位操作的SSE/SSE2/SSE3指令集。另见here获取更多信息。

c++ - 如何将 32 位编译二进制文件转换为 64 位

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭5年前。Improvethisquestion背景:我们已经获得了在VisualStudio中构建32位Windows应用程序的软件产品。我们希望将此应用程序移植到64位。此代码的一个关键任务组件是一个最初由第三方使用gFortran构建的黑盒静态库(.a文件)。最初的开发人员已经去世,我们能够获得的Fortran源代码是不完整的,而不是构建该库的版本(并且包含已编译库中不存在的严重错误)。他们没有使用VCS。问题:我想创建一个64位静态库,其代码在

c++ - 如何在 64 位中构建 Boost 1.64?

我运行的是Windows10并在笔记本电脑中安装了VisualStudio2017社区版。我有一些较旧的程序在VS2015中使用64位Boost1.62.0编译得很好。出于一些非常奇怪的原因,我无法找到一种方法来使用VS2017和此命令行从Boost1.64.0(这里是文件系统和计时器)编译任何库:b2--build-dir=..\build_here--with-filesystem--with-timer--address-model=64命令将执行并构建库,但是是32位!!可能出了什么问题?问候,胡安登特 最佳答案 更新我给的

c++ - 在 Visual Studio 中使用 64 位编译器

我使用VisualStudio2017。在一个项目(我的目标是x64)中,我收到错误:C1060,编译器堆空间不足,遗憾的是得知编译时碰巧存在内存限制。当监控CL.exe时,它​​确实在达到4GB之前停止了。所以看起来CL.exe默认是一个32位的应用程序,见:https://learn.microsoft.com/en-us/cpp/build/how-to-enable-a-64-bit-visual-cpp-toolset-on-the-command-line阅读此页后,我安装了“通用Windows平台工作负载”,希望能够访问64位版本的CL.exe。但是在编译我的项目时没有任

c++ - SSE 优化的 64 位整数模拟

对于我正在从事的业余项目,我需要在x86CPU上模拟某些64位整数运算,并且它需要快速。目前,我正在通过MMX指令执行此操作,但这真的很麻烦,因为我必须一直刷新fp寄存器状态(并且因为大多数MMX指令处理已签名整数,我需要无符号行为)。所以我想知道SO上的SSE/优化专家是否可以使用SSE提出更好的实现。我需要的操作如下(非常具体):uint64_tX,Y;X=0;X=1;XY;具体来说,我不需要通用的加法或移位,比如只加一个,左移一个。真的,只是此处显示的精确操作。当然,在x86上除外,uint64_t通过使用两个32位标量来模拟,这很慢(而且,在我的例子中,根本不起作用,因为我需要

c++ - Xcode C++::架构 x86_64 的重复符号

我是Xcode的新手,当我构建以下代码(MWE)时,出现以下错误ld:3duplicatesymbolsforarchitecturex86_64clang:error:linkercommandfailedwithexitcode1(use-vtoseeinvocation)我有如下三个文件;main.cpp#include"B.cpp"intmain(){square(5);return0;}B.cpp#include"A.cpp"voidsquare(intn){display(n*n);}A.cpp#includeusingnamespacestd;voiddisplay(in

c++ - undefined reference ,在 64 位系统的 Ubuntu 上使用 FFMpeg-library (AvCodec)

我正在运行最新的FFMpeg库的示例代码。我已将示例代码插入到文件videofecencoder.c中:/**copyright(c)2001FabriceBellard**ThisfileispartofLibav.**Libavisfreesoftware;youcanredistributeitand/or*modifyitunderthetermsoftheGNULesserGeneralPublic*LicenseaspublishedbytheFreeSoftwareFoundation;either*version2.1oftheLicense,or(atyouropti

c++ - Solaris 9 上的 printf + uint64?

我有一些使用sprintf将uint_64转换为字符串的c(++)代码。这需要可移植到linux和Solaris。在Linux上我们使用%ju,但在Solaris上似乎没有任何等效项。我能找到的最接近的是%lu,但这会产生不正确的输出。一些示例代码:#include#include#ifdefSunOStypedefuint64_tu_int64_t;#endifintmain(intargc,char**argv){u_int64_tval=123456789123L;#ifdefSunOSprintf("%lu\n",val);#elseprintf("%ju\n",val);#e

c++ - 从 64 位无符号整数初始化 __m128 类型

_mm_set_epi64和类似的*_epi64指令似乎使用并依赖于__m64类型。我想初始化一个__m128类型的变量,使其高64位为0,低64位设为x,其中x是uint64_t类型(或类似的无符号64位类型)。这样做的“正确”方法是什么?最好,这应该以独立于编译器的方式完成。 最佳答案 回答有关如何将64位值加载到XMM寄存器的低64位同时将高64位清零的问题_mm_loadl_epi64(&x)willdoexactlywhatyouwant.关于_mm_set_epi64我曾说过,查看AgnerFog的源代码VectorCl