用Int64进行比特移位
需要移动INT64变量.我正在从数据库文件中解析伪数学函数.变量是UINT32或INT32,因此我确实将它们放入了INT64中,以平等处理它们而不会丢失任何东西.在我的一个treenodes中,我需要bitshift int64. 不幸的是,移位操作员不适用于INT64.我不知道的标准方法可以转移int64吗? //Int32 Example works int a32 = 1; int b32 = 2; int c32 = a32 >> b32; //Int64 Example does not compile Int64 a64 = 1; Int64 b64 = 2; Int64 c64 = a64 >> b64; //invalid operator 解决方案 我相信,即使左手操作数不是int. c#在msdn上的规范. 其他解决方案 要移动的位数必须为int. eg: int shift = 3; long foo = 123456789
12 2024-04-19
编程技术问答社区
如何在C#中使用Int64
问题很容易!您如何表示C#中的64位int? 解决方案 64位int长 其他解决方案 system.int.int64 是.net类型,在C#中也称为Long 其他解决方案 签名的64位整数是long,一个无符号为ulong. FRAMWWORK中的相应类型分别为System.Int64和System.UInt64. 示例: long bigNumber = 9223372036854775807;
6 2024-04-18
编程技术问答社区
在64位电脑上,int.MaxValue是什么?
System.Console.WriteLine(int.MaxValue); 这条线给了我2,147,483,647的答案,因为我有一个32位PC. 64位PC上的答案会相同吗? 解决方案 是. int.maxvalue:2,147,483,647 来源: https://www.dotnetperls.com/int-maxvalue > 其他解决方案 是的,在64位机器上的答案将相同. in .net,int是签名32位整数,无论处理器如何.它的.NET框架类型是System.Int32. c#语言规范状态: > int类型表示签名的32位 整数具有价值 –2,147,483,648和2,147,483,647. 其他解决方案 int只是Int32的别名 - 它在C#规范中定义.因此,int.MaxValue与Int32.MaxValue相同,该>始终是2147483647.
14 2024-04-17
编程技术问答社区
在C#下,Int64在32位处理器上的使用是危险的
我在MS文档中阅读,在32位Intel计算机上分配64位值不是原子操作.也就是说,操作不是线程安全的.这意味着,如果两个人同时将值分配给静态Int64字段,则无法预测字段的最终值. 三部分问题: 这真的是真的吗? 这是我在现实世界中担心的吗? 如果我的应用程序是多线程,我真的需要用锁定代码包围我的所有Int64作业? 解决方案 这与您遇到的每个变量无关.如果某些变量用作共享状态或某种变量(包括但不限于某些 static字段),则应处理此问题.对于在闭合或迭代器转换中封闭而没有悬挂的局部变量,它完全没有问题,并且一次被单个函数(因此,单个线程)使用. 其他解决方案 即使写信是原子量,每当您访问变量时,您仍然需要取出锁定.如果您不这样做,那么至少您必须制作变量volatile,以确保所有线程在下次读取变量时都会看到新值(几乎总是您想要的).这使您可以做原子,挥发性套装 - 但是,一旦您想做更有趣的事情,例如添加5次,您就会回到锁定. 锁定编程非常困难.您
6 2024-04-14
编程技术问答社区
在C#中,Int64不是等于long吗?
我一直在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(); 错误是: 指定的铸
26 2024-04-12
编程技术问答社区
在C#中生成随机值
如何使用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
14 2024-04-11
编程技术问答社区
_int64 bit field
我需要在一个结构中使用6字节(48位)Bitfield,我可以用作无符号整数进行比较等.沿以下内容: pack (1) struct my_struct { _int64 var1:48; } s; if (s.var >= 0xaabbccddee) { // do something } 但在64位窗口上以某种方式,sizeof该结构总是返回8个字节而不是6个字节.任何指针都值得赞赏吗? 解决方案 您已经使用了_int64,因此sizeof返回8.您决定在可用的64位中使用48位.即使我们声明这样的内容 - struct my_struct { _int64 var1:1; } s; still sizeof会说8.简而言之,Bitfields的分配将根据Bitfield的类型进行.在这种情况下,其_int64及其8个字节分配. 其他解决方案 不幸的是,有点提交的大小是基础类型的大小,在这种情况下,_int64为8个字节. 由于我所
10 2024-04-09
编程技术问答社区
使用__int64地址的ReadProcessMemory
大家好,我想从我已经知道的备忘录中知道的过程中获得一些记忆.我定义了要扫描的区域(0x190d186ff-> 0x190d1870a),但是地址太大,无法存储在简单的INT中.这就是为什么我使用__int64,但是有了修改,ReadProcessMemory似乎不再处理地址了. 当我编译时,我收到了3个有关VirtualProtectex和ReadProcessMemory的警告:从不同大小的整数铸造到指针 如何从内存中读取真正的大地址? int main( int argc, char *argv[] ) { HWND hWnd; DWORD PID; HANDLE hProc; __int64 address; char mem = 0; PDWORD oldProtect = 0; int valid = 0; char
4 2024-04-09
编程技术问答社区
在一个32位的应用程序中使用64位的整数可以吗?
我在C和C ++中注意到,我们可以使用int64_t,或者简单地使用long long. 如果我使用这些类型编译了 32位代码,我是否会在 64bit 和/或 32bit机器上遇到任何性能问题?? 除了节省一些RAM之外,我是否有理由只使用int? 毕竟,64位INT在存储大量方面更有用. 解决方案 如果我使用这些类型编译了32位代码,我会在64bit和/或32位机器上遇到任何性能问题吗? 您的编译器可能需要生成几个机器代码指令,以对64位值执行操作,从而减慢这些操作几次.如果这可能是一个问题,您想进行一些基准测试,以评估使用现实数据对特定程序的影响.该问题存在于您在32或64位机器上执行32位可执行文件的位置. 我是否有理由只使用int? 除了性能和内存使用情况外,偶尔还有理由使用int,因为您可以使用int>使用其他API/流等.如果使用int,则还具有微妙的文献价值,否则其他程序员可能会浪费时间想知道为什么您会竭尽全力使用long lon
10 2024-04-08
编程技术问答社区
在Windows中把__int64转换为long
如何将__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 __int64,甚至没有类型的
8 2024-04-07
编程技术问答社区
如何将字符串转换为int64_t?
如何将程序参数从argv转换为int64_t? atoi()仅适用于32位整数. 解决方案 c99符合尝试. [edit]被@R雇用.校正 // Note: Typical values of SCNd64 include "lld" and "ld". #include #include int64_t S64(const char *s) { int64_t i; char c ; int scanned = sscanf(s, "%" SCNd64 "%c", &i, &c); if (scanned == 1) return i; if (scanned > 1) { // TBD about extra data found return i; } // TBD failed to scan; return 0; } int main(int arg
10 2024-04-07
编程技术问答社区
对于可移植代码,我应该使用long long还是int64_t?
我有一个用C和C ++编写的开源代码库.我正在寻找一种整数类型,保证至少 64位宽,可以在大多数OS X(Intel,64位)和带有开源C的Linux Box上可靠地编译.和C ++编译器,最终用户没有太多额外的工作. Windows和32位客户端支持目前并不重要. 我在OS X上进行了一些测试,并且使用开发人员工具运输的最新GCC不支持C+11模式(因此似乎不能保证long long的可用性). clang也不支持这一点,尽管在某个版本之后启用了C99模式,但它支持long long. 当可移植性是一个重要目标时,是否建议使用int64_t代替long long?使用格式说明符似乎很痛苦. 我可以可靠地将int64_t施加到long long(以及同样在uint64_t上等效的unsigned)与以long long为参数的现有函数和库一起使用它吗? (当然,再次返回.) 在那个心理框架中,如果我运送不需要叮当功能的代码,而不是在GCC中,Clang将替换GCC
12 2024-04-06
编程技术问答社区
我是否需要有64位处理器来使用64位数据类型?
我有几个问题: 我是否需要使用64位处理器才能使用64位数据类型(__ int64或int64_t)? in int64_t的" t"含义? 从哪个版本的GCC和VCC开始支持数据类型? 64位数据类型是否只是使数据长度增加一倍,或者在引擎盖下还有其他一些事情? 解决方案 您不需要64位处理器即可使用64位数据类型.这一切都取决于编译器,仅取决于编译器.如果需要的话,编译器可以为您提供128位,237位或803位数据类型. 但是,请记住,通常32位CPU无法直接处理64位值,这意味着支持64位类型的所有必要语言操作的负担在于编译器和库.编译器将不得不生成32位CPU指令的或更不用的复杂序列,以便对64位值进行添加,移位,乘法等.这意味着,在64位数据类型上为32位CPU的基本语言操作生成的代码中不会像64位CPU生成的代码中那样有效(因为在后者中,大多数语言操作都将由单个CPU指令). int64_t中的" t"代表" type"或" type
6 2024-04-06
编程技术问答社区
我可以在mongodb'的NodeJS驱动中手动指定BSON类型吗?如果我使用"$numberLong",我就会得到错误。
这就是我在将文档的对象插入集合之前构建文档的对象 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 '$' " } } 我正
12 2024-04-04
编程技术问答社区
向双精度SSE2寄存器加载64位整数的最佳方法?
在32位模式下加载64位整数值的最佳/最快方法是什么? ? 在64位模式下,cvtsi2sd可以使用,但在32位模式下,它仅支持32位整数. 到目前为止,我还没有找到太多: 使用fild,fstp堆叠然后movsd movsd xmm regission 加载高32位部分,乘以2^32,添加低32位 第一个解决方案是缓慢的,第二个解决方案可能会引入精确损失(编辑:,而且无论如何都很慢,因为低32位必须转换为未签名...) ) 任何更好的方法? 解决方案 您的第二个选项 有点笨拙.我假设您的64位数字最初是在EDX中:eax. cvtsi2sd xmm0, edx // high part * 2**-32 mulsd xmm0, [2**32 from mem] // high part movsd xmm2, [2**52 from mem] movd xmm1, eax orpd
8 2024-03-17
编程技术问答社区
如何将System.DirectoryEntry的 "uSNChanged "属性值改为Int64?
我正在尝试获取目录服务对象的" USNchanged"值的INT64值.不幸的是,它总是回到某种形式的com对象.我尝试使用铸造到int64,调用int64.parse()并调用convert.toint64().这些都没有. 对于给定的DirectoryEntry对象,此代码将显示属性: private static void DisplaySelectedProperties(DirectoryEntry objADObject) { try { string[] properties = new string[] { "displayName", "whenCreated", "whenChanged", "uSNCreated", "uSN
10 2024-01-10
编程技术问答社区
在32位系统上使用int64_t而不是int32_t,对性能有什么影响?
我们的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
6 2024-01-08
编程技术问答社区
在Windows中把__int64转换为long
如何将__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 __int64,甚至没有类型的
46 2023-12-05
编程技术问答社区
为什么"无符号INT64_T"在C中出现错误?
为什么以下程序给出错误? #include int main() { unsigned int64_t i = 12; printf("%lld\n", i); return 0; } 错误: In function 'main': 5:19: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'i' unsigned int64_t i = 12; ^ 5:19: error: 'i' undeclared (first use in this function) 5:19: note: each undeclared identifier is reported only once for each function it appears in 但是,如果我删除 unsigned 关键字,则可以正常
16 2023-11-09
编程技术问答社区
如何在R中转换64位十六进制字符串?
如何转换R? 中的64位十六进制串 > library(int64) > as.int64("7f2d36a2a000") [1] NA Warning message: In as.int64("7f2d36a2a000") : NAs introduced > as.int64("0x7f2d36a2a000") [1] NA Warning message: In as.int64("0x7f2d36a2a000") : NAs introduced 解决方案 对于一个很大的数字,您需要加载一个支持任意数字表示表示的软件包. rmpfr 是一个例子: library(Rmpfr) ## Check that it works as expected on smaller numbers: strtoi("ff", base=16) # [1] 255 mpfr("ff", base=16) # 1 'mpfr' number of precision 8 b
86 2023-10-30
编程技术问答社区