草庐IT

C++ 32 位与 64 位 float 限制

鉴于代码段如下,我只想知道为什么longdouble的最大值在64位比32位小?为什么64位版本不能像32位版本那样扩展数字来填充“40”精度输出?LDBL_MIN和LDBL_MAX的值似乎相等,这是一个错误吗?我查看了我机器中的float.h文件,但找不到这些宏常量的明确定义。测试代码(平台=Win7-64bit)#include#includecout32位结果(MinGW-20120426)FLT_MAX=340282346638528859811704183484516925440DBL_MAX=1.797693134862315708145274237317043567981

c++ - 读取 64 位整数文件

我正在尝试通过自己编写一些代码来学习C++,并且在这个领域非常新。目前,我正在尝试读写一个64位整数文件。我用以下方式编写64位整数文件:ofstreamodt;odt.open("example.dat");for(uint64_ti=0;i任何人都可以帮助我如何读取那个64位整数文件(一个一个地)吗?所以,我发现的例子都是逐行读取的,而不是一个一个整数。编辑:ofstreamodt;odt.open("example.dat");for(uint64_ti=0;i>cur){cout 最佳答案 如果您必须使用文本文件,您需要一些

c++ - Windows XP(32 位,SP3)播放声音时随机应用程序暂停半秒

我注意到当Windows在(至少我的)多核机器(不是在虚拟机中)上播放声音时,不同程序的执行有时会延迟半秒。我测试了3种不同的计算机硬件配置。我还编写了一个小型C++测试应用程序来重现此问题。它只是计算内存中几兆字节的废话并输出为此花费的时间。这是在循环中完成的,因此您可以不断获得输出。我将这个测试程序(包括自编译的源代码,例如来自MinGW的GCC4.7.2,如果你担心可执行文件中的恶意软件)上传到这里:http://daiw.de/share/PrintCalculationTimes.zip在以下屏幕截图中,您可以看到在程序执行时播放声音(通过控制面板中的声音设置)时发生的情况:

c++ - 如何将 64 位地址的 std::string 表示形式转换为 uint64_t?

我有一个std::string表示一个64位内存地址,采用little-endian,十六进制形式。如何将其转换为uint64_t表示形式? 最佳答案 #include#include#include#include#includeintmain(){std::strings("0x12345");std::stringstreamstrm(s);std::uint64_tn;strm>>std::hex>>n;std::cout这会按预期打印12345。编辑:如果你想从小端转换为大端,那也是可能的:#include#include

c++ - GCC 无法矢量化 64 位乘法。可以在 AVX2 上矢量化 64 位 x 64 位 -> 128 位加宽乘法吗?

我尝试对使用64位加宽乘法的CBRNG进行向量化。static__inline__uint64_tmulhilo64(uint64_ta,uint64_tb,uint64_t*hip){__uint128_tproduct=((__uint128_t)a)*((__uint128_t)b);*hip=product>>64;return(uint64_t)product;}这样的乘法在AVX2中是否以vector形式存在? 最佳答案 没有。没有64x64->128位算术作为vector指令。也没有vectormulhi类型的指令(乘

c++ - 明确定义的移位超过 32 位,没有编译器警告

这是一个愚蠢的问题,部分原因是为了好玩。我有一个“明确定义”(或“饱和”?)位掩码函数templateuint32_tmask(uint32_tx){constuint32_tMASK=N>=32?~uint32_t(0):(uint32_t(1)预期行为:uint32_tx=~uint32_t(0);//0xFFFFFFFFmask(x)=>0x000000FFmask(x)=>0x00FFFFFFmask(x)=>0xFFFFFFFFmask(x)=>0xFFFFFFFF但我不喜欢有一个未定义的代码uint32_t(1)在mask()内尽管它100%无害(不应对其进行评估。)我不想

c++ - 找出分数 a/b 的小数点后第 k 位,其中 a,b,k 是非常大的整数(小于 10e18)

我的任务是找到分数(a/b)小数点后第k位的数字。昨天我发现了这个算法。为了获得小数点后的任何数字,我生成了一个名为rem的变量并进行了循环for(inti=1;i循环将返回一个值,该值是小数点后的第k位。但是这个任务要求我用a,b,k计算非常大的数(小于或等于10e18),所以代码肯定会超过时间限制。找出重复前的数字个数。它是分母中因数2和5中较大的一个。如果k不超过位数,运行for循环。否则,我们仍然会运行for循环到k+1。将除法的余数存储在变量x中。用上面相同的内容运行一个while循环,直到余数再次具有x的值。此后,将除法的每一个商存储到一个名为qut的数组中。while循环

c++ - 按位替换两个数字中的位

我对如何使用按位运算将位间隔从数字X交换到数字Y很感兴趣。例如我有数字:X=00000000Y=00111111位置开始,位置结束我想用相同位置的Y中的位替换X中的[positionStart,positionEnd]位。 最佳答案 如果您有一个掩码m指示您要移动或交换的位,您可以像这样移动它们:x=x^((x^y)&m)或者像这样交换它们:t=(x^y)&mx^=ty^=t这可以解释为取x和y之间的位差,仅在设置了m的地方。然后对x进行异或运算,翻转x中的位,其中x和y不同(而m已设置),因此它将x的那些位更改为y的位。y也是如此

c++ - 有符号的 8 位元素的 AVX2 整数乘法,产生有符号的 16 位结果?

我有两个__m256ivector,填充了32个8位整数。像这样:__int8*a0=new__int8[32]{2};__int8*a1=new__int8[32]{3};__m256iv0=_mm256_loadu_si256((__m256i*)a0);__m256iv1=_mm256_loadu_si256((__m256i*)a1);我如何使用类似_mm256_mul_epi8(v0,v1)(不存在)或任何其他方式来乘以这些vector?我想要2个结果vector,因为输出元素宽度是输入元素宽度的两倍。或者类似于_mm_mul_epu32的东西也可以,只使用偶数输入元素(0、

c++ - 如何允许 64 位 Windows 上的 32 位应用程序执行 Windows\System32 中提供的 64 位应用程序

假设您有一个应用程序,您希望为用户提供浏览system32目录和执行程序(如telnet)的能力。当您需要支持XP及以上作为客户端和2k及以上服务器时,最好的支持方法是什么?写完所有这些后,我想知道提供浏览器来执行此操作是否花费了太多时间/精力,他们可以从资源管理器中复制它。仍然需要启动能力。我在Nynaeve上找到了一些讨论.目前看来有以下几种选择在windows中创建一个sysnative文件夹,这将允许您浏览/执行64位。问题是:仅适用于Vista/Longhorn,因此不支持XP64导致不同的路径命名,不能在多个版本上使用相同的路径。将对整个窗口都有效,而不仅仅是我们的应用在安