草庐IT

c++ - 从 boost::hash 获取 32 位哈希值

我正在使用boost::hash获取字符串的哈希值。但它在Windows32位和Debian64位系统上为相同的字符串提供了不同的哈希值。那么如何使用boost::hash获得相同的哈希值(32位或64位)而不考虑平台? 最佳答案 关于boost::hash的保证是什么?我没有看到任何保证生成的哈希码在外部可用产生它的过程。(这种情况经常发生散列函数。)如果您需要外部数据的散列值,在不同的程序和不同的平台上有效(例如对磁盘上数据的哈希访问),那么你必须编写你的自己的。像这样的东西:uint32_thash(std::stringco

c++ - 比较一个 32 位 float 和一个 32 位整数而不转换为 double 值,当任一值可能太大而无法完全适合另一种类型时

我有一个32位floatf我需要转换为32位无符号整数的数字(已知为正数)。它的大小可能太大而不适合。此外,下游计算需要一些净空。我可以计算最大可接受值m作为32位整数。如果f,我如何在受约束的32位机器(ARMM4F)上有效地确定C++11数学上。请注意,这两个值的类型不匹配。以下三种方法各有其问题:static_cast(f):我认为这会触发未定义的行为,如果f不适合32位整数f(m):如果m太大而无法准确转换,转换后的值可能大于m使得后续比较在某些边缘情况下会产生错误的结果static_cast(f)(m):在数学上是正确的,但需要强制转换为double并使用double,出于效

c++ - 将 74 位整数转换为基数 31

生成UFInumber,我用bitset大小为74。要执行UFI生成的第2步,我需要转换此数字:9444732987799592368290(10000000000000000000000000000101000001000001010000011101011111100010100010)进入:DFSTTM62QN6DTV1通过将第一个表示转换为基数31并从表中获取等效字符。#definePAYLOAD_SIZE74//payload=binaryof9444732987799592368290std::bitsetbs_payload(payload);/*performmodul

c++ - 在 32 位操作系统上生成 64 位可执行文件

我正在使用C++开发32位WindowsXP操作系统。但我必须为64位Windows7操作系统构建一个可执行文件。我应该怎么做?我不想运行可执行文件,我只想生成它。另外,如果还需要了解处理器,请问我。我在这些网站上读到了一点,crosscompilingforx64和msdnarticleoncrosscompiling.但是里面很多东西我都看不懂。任何人都可以逐步向我解释如何处理这个问题。除此之外,谁能告诉我什么是cmake?也可以在安装结束后查看我是完整安装VisualStudio还是默认安装。 最佳答案 如果您使用的是Visu

c++ - 使用 64 位包编译 32 位 Qt 应用程序

我正在使用Windows864位、Qt5.0.2forWindows64位和VisualStudio2012。我在64位操作系统上编译和运行我的应用程序没有问题,但显然它不适用于32位操作系统。有没有办法用我现有的编译32位应用程序,或者我应该安装QtforWindows32位?(我从here下载Qt。)如果可能的话,我想提示一下那个选项在哪里。我正在使用QtCreator。 最佳答案 64位库不可能,但您可以下载并安装适当的“Qt5.0.2forWindows32-bit”(您可以在Creator中配置目标以安装多个版本的Qt)

c++ - 在 64 位 Debian 环境下编译 32 位 qt 源码

我想在我的Debian64位环境中构建32位应用程序。所以,我正在尝试编译Qt源代码以获得32位库。我正在尝试使用以下配置命令:./configure-platformlinux-g++-32不幸的是,我收到如下错误:BasicXLibfunctionalitytestfailed!Youmightneedtomodifytheincludeandlibrarysearchpathsbyediting但是当我执行以下操作时:./configure-platformlinux-g++-64它工作正常。有什么猜测吗? 最佳答案 根据那里

c++ - i5-2500k 上的 cpuid 指令 : MMX, SSE,SSE2 位未设置

这是预期的吗?我希望我的SandyBridgeCPU报告它可以处理MMX、SSE和SSE2指令。这些位是否未设置是因为这些“旧”指令集已被一些较新的指令集“取代”?我用了thiscodehere将CPU检测放入我的代码中。#include"CPUID.h"intmain(intargc,char*argv[]){CPUIDcpuid;cpuid.load(0);printf("CPU:%.4s%.4s%.4s",(constchar*)&cpuid.EBX(),(constchar*)&cpuid.EDX(),(constchar*)&cpuid.ECX());charbrand[0x

c++ - MinGW 编译的程序在 64 位 Windows 上崩溃

我在带有IntelCorei7-3612QM的64位Windows7上安装了32位MinGW和64位EclipseCDT。当我编译并运行helloworld时,打印了字符串,但程序随后得到了一个SIGILL。来源:#includeusingnamespacestd;intmain(){cout堆栈跟踪:hello.exe[C/C++Application]hello.exe[5532]Thread[1]0(Suspended:Signal:SIGILL:Illegalinstruction)libstdc++-6!_ZSt4cout()at0x6fccc3c0libstdc++-6!_

c++ - 按位旋转(循环移位)

我试图用C++编写一些关于“按位旋转”的代码,我想通过左移位来实现。我不知道如何编写代码,但我在“维基百科”中找到了一些这样的代码。unsignedintrotl(unsignedintvalue,intshift){return(value>(sizeof(value)*CHAR_BIT-shift));}然后我试着让它工作,但是这段代码没有给出我预期的输出。前任。我有数字unsignedint12,二进制1100,当我想用​​上面的代码按左shif进行按位旋转时,输出是unsignedint24,(11000),它必须给出输出unsignedint9,因为如果我进行按位旋转(左移)

c++ - 如何避免在 64 位指针上浪费内存

我希望就如何处理我即将进行的设计获得一些高级建议。解决我的问题的直接方法将导致数以百万计的指针。在64位系统上,这些可能是64位指针。但就我的应用程序而言,我认为我需要的地址空间不超过32位。但是,我仍然希望系统能够利用64位处理器算法(假设这是我在64位系统上运行所获得的结果)。更多背景我正在实现一个树状数据结构,其中每个“节点”包含一个8字节的有效负载,但还需要指向四个相邻节点(父节点、左子节点、中子节点、右子节点)的指针。在使用64位指针的64位系统上,这相当于32个字节,仅用于将8字节有效负载链接到树中——400%的“链接开销”。数据结构将包含数百万个这样的节点,但我的应用程序