我们的C ++库当前使用time_t来存储时间值.我开始在某些地方需要次秒的精度,因此无论如何都需要较大的数据类型.另外,在某些地方遇到2038年的问题可能很有用.因此,我正在考虑用基础INT64_T值完全切换到单个时间类,以替换所有位置的time_t值. 现在,我想知道在32位操作系统或32位CPU上运行此代码时,这种更改的性能影响. iiuc编译器将使用32位寄存器生成代码以执行64位算术.但是,如果这太慢了,我可能不得不使用更差异化的方式来处理时间值,这可能会使软件更难维护. 我感兴趣的是: 哪些因素会影响这些操作的性能?可能是编译器和编译器版本;但是,操作系统或CPU也会影响这一点吗?普通的32位系统会使用现代CPU的64位注册吗? 在32位模拟时,哪些操作特别慢?或哪个几乎不会放缓? 在32位系统上使用int64_t/uint64_t是否有现有的基准结果? 有人对这种表现影响有自己的经验吗? 我对Intel Core 2系统的Linux 2.6(R
以下是关于 int64 的编程技术问答
嗨,我有一个nsmutablearray,我尝试了: var ma = NSMutableArray() let number:Int64 = 8345834344 ma.addObject(number)// Error "Type Int64 does not conform to protocol AnyObject" 如何将int64变量添加到nsmutablearray()? 解决方案 您使用的是粉底阵列(NSMutableArray),因此您应该使用一个基础编号对象: ma.addObject(NSNumber(longLong:number)) 您也可以使用本机Swift阵列: var ma = [Int64]() ma.append(number) 其他解决方案 喜欢Swift的很多东西,这是在Swift中实现的. 因此,您可以执行此操作(或您想要的类型的同等用品),这将神奇地使用语言期望AnyObject的INT64成为可能
以下代码的问题: var x uint64 = 18446744073709551615 var y int64 = int64(x) 是y是-1.没有信息丢失,是在这两种数字类型之间转换以使用编码器和解码器的唯一方法? buff bytes.Buffer Encoder(buff).encode(x) Decoder(buff).decode(y) 注意,在您的典型情况下,我没有尝试直接数字转换.我更关心维护随机数生成器的统计属性. 解决方案 看到-1将与运行为32bits的过程一致. 参见例如 go1.1 go1.1发行说明(引入 C2>) x := ^uint32(0) // x is 0xffffffff i := int(x) // i is -1 on 32-bit systems, 0xffffffff on 64-bit fmt.Println(i) 使用fmt.Printf("%b\n", y)可以帮助查看发生了什么(
这就是我在将文档的对象插入集合之前构建文档的对象 function newTupple(name, email){ return { email:email, name:name, account_status:{ email_verified:{ //I want this in Int64 "$numberLong": `${Date.now()}` }, activated:false } } } 然后我像 一样插入 const new_doc = newTupple("Ninja", "jojo@something.com") collection.insertOne(new_doc, (err, result)=>{ if(err){ //err: returns " key $numberLong must not start with '$' " } } 我正
当我解析这片小json时: { "value" : 9223372036854775807 } 这就是我得到的: { hello: 9223372036854776000 } 有什么方法可以正确解析? 解决方案 不是内置的JSON.PARSE.您需要手动解析它并将值视为字符串(如果您想与它们进行算术,则有 bignumumber .解析器. edit2(原始答案后7年) - 很快就可以使用标准JSON API解决此问题.请查看此TC39提案,以将对源字符串访问访问到Reviver函数 - httpps ://github.com/tc39/proposal-json-parse-with-source edit1:我创建了一个 package for you:) var JSONbig = require('json-bigint'); var json = '{ "value" : 9223372036854775807, "v2":
我试图在Windows(Mingw)和Linux(G ++)中编写C ++中的跨平台代码.我被用来将Linux中的64位整数定义为"长",但是当我搬到Mingw时,SizeOf(Long)返回了4个字节.然后,我发现我可以使用"长"或" __int64"来定义mingw中的64位整数.我有两个问题: 1.-最可行的方法是定义Windows和Linux的64个位整数?我目前正在使用#IFDEF,但我不知道这是否是最好的方法这样做: #ifdef LINUX #define INT64 long #elif WIN32 #define INT64 long long #endif 2 .- 我应该在mingw中使用"长"或" __int64"?为什么? 解决方案 您可以使用类型int64_t,该类型在标题cstdint中定义.这是C ++ 11的标准配置. 请注意,如果您使用的平台不支持64位整数. 可能不存在. 至于long long
我在C ++ Windows中进行编码. INT64 dirID = -1; CString querySQLStr = _T(""); querySQLStr.Format(L"select * from ImageInfo where FolderPath=%64d;", dirID); querySQLStr always like this: select * from ImageInfo where FolderPath= 1214; 使用%64d?是正确的 非常感谢 解决方案 我没有方便测试的Windows机器,但我认为Cstring应该接受: querySQLStr.Format("%I64d", dirID); 可能值得注意的是,这是特定于Windows的,但是由于您使用的是Cstring,我想这没关系. 其他解决方案
我一直在C#中的SQL和数据库中玩 sqlceconnection .我一直在使用 executereader 要阅读结果和 bigint bigint bigint 记录ID的值 被读成久违. 今天,我一直在玩SQL语句,这些语句使用基于计数的语句('Select Count(From X'),并且一直在使用 executesCalar 读取这些单个有价值的结果. 但是,我遇到了一个问题.我似乎无法将这些值存储到迄今为止我一直在使用的长数据类型中.我可以将它们存储到INT64中. 我一直在使用bigint进行记录ID来获取最大潜在的记录数. bigint 8字节因此是int64.长时间不等于INT64,因为两者都是64位签名的整数? 因此,为什么我不能将INT64投入长时间? long recordCount =0; recordCount = (long)selectCommand.ExecuteScalar(); 错误是: 指定的铸
如何使用C#? 中的Random类生成随机INT64和UINT64值 解决方案 这应该解决问题. (这是一种扩展方法,因此您可以在Random对象上调用常规Next或NextDouble方法时称呼它. public static Int64 NextInt64(this Random rnd) { var buffer = new byte[sizeof(Int64)]; rnd.NextBytes(buffer); return BitConverter.ToInt64(buffer, 0); } 如果您想要未签名的整数,则只需将Int64替换为UInt64,所有人都应该正常工作. 注意:由于没有提供有关安全性或生成数字的所需随机性的上下文(实际上OP专门提及了Random类),我的示例只是处理Random当随机性(通常被量化为信息熵)时,类是首选解决方案.出于兴趣,请参见提及RNGCryptoServiceProvider的其他答案(Sy
我正在制作涉及游戏中心排行榜的游戏.我想制作自定义排行榜UI,而不是使用默认接口. 我正在尝试将存储在游戏中心排行榜中的值转换为字符串,以便我可以使用Sklabelnode显示它们.但是,我有一个错误,说: 无法使用类型的参数列表'(int64?)' 调用类型'字符串'的初始器 我正在使用 访问游戏中心得分 leaderboard.scores[i].value 当我使用String(describing: )方法时,我的标签节点读取"可选(10)",而分数在括号内的任何内容.我想知道如何将游戏中心中的数据存储干净地传达成字符串格式的数字. 解决方案 尝试可选绑定: if let unwrapped = leaderboard.scores[i].value { let string = String(unwrapped) print(string) } 或在其余范围中使用未包装的值( ),请使用守卫语句 guard let
如何将__int64转换为Windows(MSVC8&MSVC6)? 正常的打字会起作用吗? 另外,如何将长期转换为__int64?如果长度是负值,它会起作用吗? 注意 - 我说的是一个场景,其中__int64变量始终包含一个不超过32位的值. 解决方案 1.将长度转换为__int64 分析到 msdn> msdn >关键字: _ _int64关键字声明了一个新的 类型,一个64位(8字节)整数.作为 与int,短期和长期类型一起 _ _int64类型具有相应的 未签名的版本,所以_ _int64 关键字实际上可以用来创建 两种类型. 以下代码示例显示了如何 声明两个64位整数,一个 签名和另一个未签名: __ int64 signed_big_int; unsigned __int64 unsigned_big_int; __int64已签署,它应该比long更宽,因此您可以将long分配给long,甚至没有类型的铸件,当然sig
我们使用VS 2008 有一个很大的枚举,许多开发人员 填充了 此枚举具有__int64类型(Microsoft扩展名),我想让编译器抱怨枚举中的非独特价值. 如果这是通常的枚举,我会这样: enum E1 { E11 = 0x01F00, E12 = 0x01F00, E13 }; #pragma warning(push) #pragma warning(error: 4061) #pragma warning(error: 4062) void F(E1 e1) { switch (e1) { case E11: case E12: case E13: return; } } #pragma warning(pop) ,如果E1具有2个相同的值 ,则函数f将具有错误 ,如果开发人员忘记添加新值 ,它将有另一个错误 但是我的枚举有__int64型(或长长)
我一直在使用cstdlib使用std::atoll将字符串转换为使用GCC的int64_t.该功能似乎在Windows工具链上没有可用(使用Visual Studio Express 2010).最好的选择是什么? 我也有兴趣将strings转换为uint64_t.整数定义取自cstdint. 解决方案 msvc具有_atoi64和类似功能,请参见对于无签名的64位类型,请参见 其他解决方案 使用Stringstreams() std::string numStr = "12344444423223"; std::istringstream iss(numStr); long long num; iss>>num; 使用Boost Lexical_cast(boost/lexical_cast.hpp) std::string numStr = "12344444423223"; long long num = boost:
我正在MS Dev Studio下的Win32下的C ++转换一些代码.在旧的代码中,我使用QueryPerformanceCounter()进行了一些高速计时,并对获得的__Int64值进行了一些操纵,尤其是负数和鸿沟.但是现在,在C ++下,我被迫使用groun_integer,因为这就是queryPerformanceCounter()返回.但是现在在我尝试进行一些简单数学的线路上,我会收到一个错误: 错误c2676:binary' - ':'groun_integer'不定义此操作员或转换为可接受的类型的预定义操作员 我试图将变量施加到__int64,然后得到: 错误c2440:'type cast':无法从'groun_integer'转换为'__int64' 如何解决这个问题? 谢谢, 解决方案 大_integer是一个64位整数和一对32位整数的结合.如果您想对联盟内部选择64位INT进行64位算术. LARGE_INTEGER
我有一个用C和C ++编写的开源代码库.我正在寻找一种整数类型,保证至少 64位宽,可以在大多数OS X(Intel,64位)和带有开源C的Linux盒上可靠地编译.和C ++编译器,最终用户没有太多额外的工作. Windows和32位客户端支持目前并不重要. 我在OS X上进行了一些测试,并且使用开发人员工具运输的最新GCC不支持C+11模式(因此似乎不能保证long long的可用性). clang也不支持这一点,尽管在某个版本之后启用了C99模式,但它支持long long. . 当可移植性是一个重要目标时,是否可以使用int64_t代替int64_t代替int64_t?使用格式说明符似乎很痛苦. 我可以可靠地将int64_t施加到long long(以及同样在与uint64_t等效的unsigned上)一起将其与以long long为参数的现有函数和库一起使用吗? (当然,再次返回.) 在那个心理框架中,如果我运送不需要叮当功能的代码,而不是在GCC中,Cl
我有几个问题: 我是否需要使用64位处理器才能使用64位数据类型(__ int64或int64_t)? in int64_t的" t"含义? 从哪个版本的GCC和VCC开始支持数据类型? 64位数据类型只是将数据长度增加一倍,或者在引擎盖下还有其他一些事情? 解决方案 您不需要64位处理器即可使用64位数据类型.这完全取决于编译器,仅取决于编译器.如果需要的话,编译器可以为您提供128位,237位或803位数据类型. 但是,请记住,通常32位CPU无法直接处理64位值,这意味着支持64位类型的所有必要语言操作的负担在于编译器和库.编译器将必须生成32位CPU指令的或更无用的复杂序列,以便对64位值执行添加,移位,乘法等.这意味着,在32位CPU生成的代码中,对64位数据类型的基本语言操作生成的代码将不像64位CPU生成的代码那样效率(因为在后者中,大多数语言操作都将由单个CPU指令). int64_t中的" t"代表" type"或" type
我试图在Go中解析JSON流.我创建了一个简化的示例: package main import ( "encoding/json" "fmt" ) var d = []byte(`{ "world":[{"data": 2251799813685312}, {"data": null}]}`) type jsonobj struct{ World []World } type World struct{ Data int64 } func main() { var data jsonobj jerr := json.Unmarshal(d, &data) fmt.Println(jerr) } 这会给我 go run testmin.go json: cannot unmarshal null into Go value of type int64 我在 sql package 中发现了一个无效的int64