草庐IT

c++ - 在 C++ 中,哪种数据类型用于非常大的数字?

我必须在我的程序中存储数字600851475143。我也尝试将其存储在longlongint变量和longdouble中,但在编译时显示错误integerconstantistoolargefor"long"type.我也尝试过unsignedlonglongint。我正在使用MinGW5.1.6在Windows上运行g++。我应该使用什么数据类型来存储数字? 最佳答案 longlong可以,但您必须在文字上使用后缀。longlongx=600851475143ll;//canuseLLinsteadifyouprefer.如果您将

c++ - double 到 long 的转换不正确

这主要是对thisotherquestion的跟进,那是一个奇怪的从long到double的转换,然后再返回到long以获得大值。我已经知道将float转换为整数类型会截断,如果截断后的值无法用目标类型表示,则行为未定义:4.9Floating-integralconversions[conv.fpint]Aprvalueofafloatingpointtypecanbeconvertedtoaprvalueofanintegertype.Theconversiontruncates;thatis,thefractionalpartisdiscarded.Thebehaviorisun

c++ - C++11 中弱类型枚举的底层类型

C++11引入了强类型枚举,语法为enumclass。它们与整数类型不兼容,需要显式转换才能获得它们的数值。C++11还引入了为弱类型枚举指定存储类的功能,格式为enumname:type{}。到这里为止都很好。但看起来即使弱类型枚举具有给定的存储类,其项的类型仍然是int。我尝试使用VisualStudio2012,11月CTP版本。考虑以下代码:enumcharEnum:char{A='A'};enumlongEnum:longlong{Tera=1000000000000};voidfct(charval){}voidfct(intval){}voidfct(longlongva

c++ - 将 C++ 模板类型 T 修改为 "long T"?

有什么方法可以将乘法返回的精度加倍(以避免溢出)?templateclassMyClass{Tmultiply(Ta,Tb){returna*b;}}类似于:longTmultiply(Ta,Tb){returna*b;}因此无论给出'int'、'long'或'double',乘法都会返回'longint'、'longlong'或'longdouble'。这是一个普遍的问题。我正在通过内部使用double来解决它。但我的问题是,在C++中是否有任何机制可以将类型提升为它的“长”变体? 最佳答案 一个可能的解决方案是定义你自己的类型特

在 Windows 中将 __int64 转换为 long

如何在Windows中将__int64转换为long(MSVC8和MSVC6)?正常的类型转换是否有效?此外,将long转换为__int64怎么样?如果多头是负值,它会起作用吗?注意-我说的是__int64变量将始终包含一个长度不超过32位的值的场景。 最佳答案 1。将long转换为__int64根据MSDN在__int64关键字上:The__int64keyworddeclaresanewtype,a64-bit(8-byte)integer.Aswiththeint,short,andlongtypes,the__int64ty

python - "WindowsError: [Error 206] The filename or extension is too long"使用子进程多次运行程序后

我的python程序在WindowsHPC2008环境中准备输入、运行外部FORTRAN代码并处理输出。它工作得很好,除非代码在1042-1045次之间执行外部程序(通常问题会更早收敛)。在这些情况下,我得到一个异常(exception):WindowsError:[Error206]Thefilenameorextensionistoolong但是,文件名的路径不会随时间增长。它只是清理目录并再次运行。代码如下:inpF=open(inName)outF=open(localOutName,'w')p=subprocess.Popen(pathToExe,shell=False,st

c++ - 为什么在windows中重复分配内存会变慢?

我想了解为什么以下代码在我的linux和windows7机器上表现不同:在Linux上,每次迭代大约需要120毫秒。在Windows7上,第一次迭代已经需要0.4秒,后续迭代需要更长的时间。第8次迭代已经花费了大约11秒,第22次迭代大约需要1分钟。我在不同的硬件上观察到这种行为。好像跟windows有关。#include#include#includevoiditeration(){intn=25000;//Allocatememorylong**blocks=newlong*[n];for(inti=0;i(end-start);std::cout谁能告诉我这里发生了什么,以及如何

c++ - 需要说明将路径转换为长 Unicode 路径或以\\?\开头的路径

首先,让我问一个修辞问题--微软,为什么让我们在路径前添加\\?\以允许它们的长度为32,767个字符?为什么不按原样使用它们并扩展API上的内部缓冲区的大小?对不起,我只是发泄我的不满......好的,现在我的实际问题是,如果我有一个路径,我如何将它转换为接受32,767个字符长度的格式?请注意,我对该路径一无所知——它可以是相对路径、绝对本地路径、网络共享等。换句话说,它可以是Microsoft发明的众多路径格式中的任何一种。乍一看,在开头添加\\?\似乎是一个简单的提议,对吧?那么,如果该路径已经转换为扩展格式怎么办?我试过readingthis从该页面的大小和底部的评论数量,您

windows - DWORD_PTR、INT_PTR、LONG_PTR、UINT_PTR、ULONG_PTR 何时、如何以及为什么?

我发现Windows有一些新的WindowsDataTypesDWORD_PTR,INT_PTR,LONG_PTR,UINT_PTR,ULONG_PTR你能告诉我何时、如何以及为什么使用它们吗? 最佳答案 *_PTR类型被添加到WindowsAPI以支持Win64的64位寻址。由于32位API通常使用DWORD等数据类型传递指针,因此有必要为64位兼容性创建新类型以替代32位应用程序中的DWORD,但是在64位应用程序中使用时扩展到64位。因此,例如,想要编写32位或64位代码的应用程序开发人员将windows32位APISetWi

windows - BAT 文件中的 "Input line is too long"错误

我在执行bat文件时遇到问题。运行一段时间后,出现“输入行太长”错误。bat文件的结构很简单。有一个主bat文件调用其他10个bat文件,这些文件负责更新我的系统模块的数据。在更新数据bat文件中,有很多调用我的系统的命令(.cmd文件),该命令负责通过一些计算来更新数据。重点是,当该进程在Windows2003Server中运行时,一切正常。没有错误。然后,当它升级到Windows2008Server时,我执行主要的bat文件,几个小时后我得到了“输入行太长”的错误。我什至无法在该cmd窗口中手动执行更新数据bat中包含的任何命令。但是,如果我关闭cmd窗口并打开一个新窗口,我可以无