%I64d 和%lld 的区别

使用int64的魅力:超大整数在编程中的应用 int64是一种整数类型,可以存储范围更广的整数值,长达64位。这意味着可以表示的整数范围更大,从-9,223,372,036,854,775,808到9,223,372,036,854,775,807。在编程中,我们经常需要处理各种类型的数据,包括整数。然而,有时候我们需要处理的数字可能非常大,超过了常规整数类型的表示范围。有时候,我们需要处理的数字可能非常大,超过了常规整数类型的表示范围。它可以存储范围更广的整数值,使我们能够处理超过常规整数范围的大整数使用int64类型:编程中处理超大整数的应用。 阅读详情

转自博客 :https://blog.youkuaiyun.com/thunders01/article/details/38879553


  1. //为了和DSP兼容,TSint64和TUint64设置成TSint40和TUint40一样的数  
  2. //结果VC中还是认为是32位的,显然不合适  
  3. //typedef signed long int     TSint64;  
  4. //typedef unsigned long int   TUint64;  
  5.   
  6. //ANSI C中规定long long才能表示64位  
  7. //参见:http://msdn.microsoft.com/en-us/library/s3f49ktz.aspx  
  8. //可惜VC++ 6.0 不认识 long long,会报error C2632: 'long' followed by 'long' is illegal  
  9.   
  10. typedef signed long long     TSint64;//It's illegal in C90. It's legel in C99.  
  11. typedef unsigned long long   TUint64;  
  12.   
  13. //typedef LONGLONG    TSint64;//VC不认  
  14. //typedef ULONGLONG   TUint64;  

 

转自  http://www.byvoid.com/blog/c-int64/

在C/C++中,64为整型一直是一种没有确定规范的数据类型。现今主流的编译器中,对64为整型的支持也是标准不一,形态各异。一般来说,64位整型的定义方式有long long和__int64两种(VC还支持_int64),而输出到标准输出方式有printf(“%lld”,a),printf(“%I64d”,a),和cout << a三种方式。

本文讨论的是五种常用的C/C++编译器对64位整型的支持,这五种编译器分别是gcc(mingw32),g++(mingw32),gcc(linux i386),g++(linux i386),Microsoft Visual C++ 6.0。可惜的是,没有一种定义和输出方式组合,同时兼容这五种编译器。为彻底弄清不同编译器对64位整型,我写了程序对它们进行了评测,结果如下表。

 

变量定义输出方式gcc(mingw32)g++(mingw32)gcc(linux i386)g++(linux i386)MicrosoftVisual C++ 6.0
long long“%lld”错误错误正确正确无法编译
long long“%I64d”正确正确错误错误无法编译
__int64“lld”错误错误无法编译无法编译错误
__int64“%I64d”正确正确无法编译无法编译正确
long longcout非C++正确非C++正确无法编译
__int64cout非C++正确非C++无法编译无法编译
long longprintint64()正确正确正确正确无法编译

 

上表中,正确指编译通过,运行完全正确;错误指编译虽然通过,但运行结果有误;无法编译指编译器根本不能编译完成。观察上表,我们可以发现以下几点:

  1. long long定义方式可以用于gcc/g++,不受平台限制,但不能用于VC6.0。
  2. __int64是Win32平台编译器64位长整型的定义方式,不能用于Linux。
  3. “%lld”用于Linux i386平台编译器,”%I64d”用于Win32平台编译器。
  4. cout只能用于C++编译,在VC6.0中,cout不支持64位长整型。

表中最后一行输出方式中的printint64()是我自己写的一个函数,可以看出,它的兼容性要好于其他所有的输出方式,它是一段这样的代码:

 

  1. void printint64(long long a)  
  2. {  
  3.     if (a<=100000000)  
  4.         printf("%d/n",a);  
  5.     else  
  6.     {  
  7.         printf("%d",a/100000000);  
  8.         printf("%08d/n",a%100000000);  
  9.     }  
  10. }  

 

这种写法的本质是把较大的64位整型拆分为两个32位整型,然后依次输出,低位的部分要补0。看似很笨的写法,效果如何?我把它和cout输出方式做了比较,因为它和cout都是C++支持跨平台的。首先printint64()和cout(不清空缓冲区)的运行结果是完全相同的,不会出现错误。我的试验是分别用两者输出1000000个随机数,实际结果是,printint64()在1.5s内跑完了程序,而cout需要2s。cout要稍慢一些,所以在输出大量数据时,要尽量避免使用。

转自  http://blog.youkuaiyun.com/zhlynn/archive/2009/03/28/4032152.aspx

64位整数全解(增补板) 
  
64位整形引起的混乱主要在两方面,一是数据类型的声明,二是输入输出。

首先是如果我们在自己机器上写程序的话,情况分类如下:

(1) 在win下的VC6.0里面,声明数据类型的时候应该写作

__int64 a;

输入输出的时候用 %I64d

scanf(”%I64d”,&a);
printf(”%I64d”,a);

(2) 在linux下的gcc/g++里面,数据类型声明写作

long long a;

输入输出时候用 %lld

(3) 在win下的其它IDE里面[包括高版本Visual Studio],数据类型声明用上面两种均可

输入输出用 %I64d

================== 以下可无视 =========================

以下是对这种混乱情况的解释,如无兴趣可以跳过

首先要说的是,和Java等语言不同,C/C++本身并没有规定各数据类型的位数,只是限定了一个大小关系,也就是规定从所占的bit数来说,short <= int <= long <= long long。至于具体哪种类型占用多少位,是由你所用的开发平台的编译器决定的。在现在的PC上一个通常的标准是,int和long同为32位,long long为64位。但是如果换到其它平台(如ARM)上,这个数字可能会有不同,类型所占的大小可以用sizeof()运算符查看。

long long是C99标准中新引进的数据类型,在古老的VC6.0中并没有这个类型,所以在VC6.0中用”long long”会发生编译错误。为了表示64位整数,VC6里采用的是微软自己搞出来的一个数据类型,叫做__int64,所以如果你是在VC6.0下编译的话,应该用__int64定义64位整型。新版的Visual Studio已经支持long long了。GCC是支持long long的,我们在win系统中使用的其它IDE如Dev-Cpp, Code::Blocks等等大多是采用的MinGW编译环境,它是与GCC兼容的,所以也支持long long(另外为了与MS兼容,也支持__int64)。如果是在纯的linux下,就只能使用long long了。

关于使用printf的输入输出,这里就有一个更囧的情况。实际上只要记住,主要的区分在于操作系统:如果在win系统下,那么无论什么编译器,一律用%I64d;如果在linux系统,一律用%lld。这是因为MS提供的msvcrt.dll库里使用的就是%I64d的方式,尽管Dev-Cpp等在语法上支持标准,但也不得不使用MS提供的dll库来完成IO,所以就造成了这种情况。

==================== 无视至此 ===========================

那么对ACMer来说,最为关心的就是在各个OJ上交题应分别使用哪种方式了。其实方式只有有限的几种:

如果服务器是linux系统,那么定义用long long,IO用%lld
如果服务器是win系统,那么声明要针对编译器而定:
+ 如果用MS系列编译器,声明用__int64 [现在新版的Visual Studio也支持long long了]
+ 如果用MinGW环境,声明用long long
+ 无论什么编译器,IO一律%I64d

下面把各大OJ情况列表如下:

1. TOJ : Linux系统
2. ZOJ : Linux系统
3. POJ : Win系统,语言如选择C/C++,则用MS编译器[支持两种声明],如选择GCC/G++,则为MinGW
4. UVa : Linux系统
5. Ural: Win系统,MS编译器[支持两种声明]
6. SPOJ: Linux系统
7. SGU : Win系统,MS编译器[支持两种声明]

如果有不太清楚的情况可以先看看各OJ上的FAQ,通常会有说明。

另外,为了避免混乱,当数据量不大时,用cin, cout进行输入输出也是一种选择


整型类型(long long 、_int64) 整型类型的输入输出格式(long long 、_int64) 立即下载

相关推荐

解析wprintf 中使用%I64d格式化输出LONGLONG的详细介绍

wprintf 中使用%I64d格式化输出LONGLONG 在写某个程序时,因为需要用到一个大的整数,就是要了LONGLONG型: 代码如下:LONGLONG nLarge;但是格式化时不知道应该用什么字符,用 %d,%l都不行。LONGLONGLONGLONG其实就是int64类型。在winnt.h可以看到: 代码如下:typedef __int64 LONGLONG;所以要想输出就要看__int64使用什么格式符了。通过查MSDN中,发现是:I64。在格式化输出则还需要结合一个d,即%I64d。对于无符号的ULONGLONG,则是%I64u。例子 代码如下:LONGLONG nLarge

C/C++的64位整型 zz

//为了和DSP兼容,TSint64和TUint64设置成TSint40和TUint40一样的数//结果VC中还是认为是32位的,显然不合适//typedef signed long int TSint64;//typedef unsigned long int TUint64;//ANSI C中规定long long才能表示64位//参见:http://msd

hi 2万+

海康工业相机 Could not find module MvCameraControl.dll(已解决)

【代码】海康摄像机 Could not find module MvCameraControl.dll(已解决)

hmbbpdx的博客 2222

%I64d

Int64是有符号 64 位整数数据类型,相当于C++中的long long、 C# 中的 long 和 SQL Server 中的 bigint,表示值介于 -2^63 ( -9,223,372,036,854,775,808) 到2^63-1(+9,223,372,036,854,775,807 )之间的整数。存储空间占 8 字节。用于整数值可能超过 int 数据类型支持范围的情况。

xiyanxiyan10的专栏 1704

电压比较器---滞回比较器(施密特触发器)

当输入电压从小电压开始增加,当其大于VT+时,电压比较器输出低电平,此时阈值电压变成下门限电压(VT-);当输入电压从大电压开始减小,当其小于VT-时,电压比较器输出高电平,此时阈值电压变成上门限电压(VT+);只有当第一次超过上门限电压或者下门限电压值,电压比较器的输出才会翻转变化;Uo为比较输出电压,有两种电压状态VoH(高电平)和VoL(低电平);当Uo输出为高时,电压比较器的阈值电压是上门限电压(VT+);当Uo输出为低时,电压比较器的阈值电压是下门限电压(VT-);Vref为比较参考电压;

weixin_69076249的博客 1万+

脑电时频分析I:谱分析

1、EEG频带划分 自发的EEG活动在活体大脑中持续存在,通常通过频率进行分类(也叫神经振荡活动) 特定频段的脑活动,即节律性的活动,具有特定的头皮分布和生物学意义 最后还有一个γ波,主要是指30hz~100hz的一个波段,通常这个波段也包含了噪声唁电的成分,比较难提取处理,比较少用到这个波段 这个波段主要是有可能躯体感觉皮层,进行一个多通道的感觉输入的i信号处理,比如我们同时处理视觉和听觉信号的处理,而且γ波与我们记忆的形成有关 除此之外,还有一个特殊的波段,8~12hz的Mu波段主要是特指我们

Kobe123brant的博客 1万+

%lld 和 %I64d的区别

%lld 和 %I64d的区别 参考一个博客的链接:https://blog.youkuaiyun.com/thunders01/article/details/38879553 posted @ 2019-04-16 23:11 Youpeng 阅读(...) 评论(...) 编辑 收藏 ...

Youpeng 1719

AFSIM仿真系统组件开发入门:手把手教你扩展传感器与武器模型

本文为AFSIM仿真系统组件开发入门指南,手把手教你如何扩展传感器与武器模型。通过深入解析AFSIM基于组件的体系结构,并结合构建自定义电子扫描阵列雷达传感器和协同交战智能武器系统两个实战案例,详细介绍了从C++插件开发、MATLAB算法集成到脚本接口暴露的完整流程,帮助你掌握定制AFSIM仿真的核心能力。

t8u9v0w1x的博客 488

%lld 和%I64d 区别 输出64位16进制 float与double输入与输出的区别

(一) %I64x和%lld两种都是C语言中格式化输出64位整型的正确做法。 区别在于编译器不同。 gcc(mingw32),g++(mingw32)只支持%I64d的输出方式。 gcc(linux i386),g++(linux i386)只支持%lld的输出方式。 另外,mac上的gcc/g++不支持%I64d的方式。 (二) 输出64位数的十六进制可以用 %llx,也可以用%I6...

bianchengdacainiao的博客 3801

STM32+LoRa模块实战:从环境搭建到数据传输完整指南(附避坑清单)

本文提供STM32与LoRa模块从环境搭建到数据传输的完整实战指南,涵盖硬件连接、开发环境配置、AT指令设置、频段优化及低功耗设计等关键步骤,特别针对常见问题提供解决方案和避坑清单,助力物联网开发者高效实现远距离低功耗通信。

weixin_29168813的博客 289

【功能安全】软件安全架构

目录01 软件安全架构介绍02 软件架构设计模板03 软件架构设计示例 软件架构设计的目的 软件架构设计的原则 软件架构设计输入与输出 软件架构设计的要求 注:软件架构设计和软件安全要求之间的双向可追溯性。软件架构设计原则: 软件架构静态/动态设计(参考秒尼科技术) 软件架构静态设计 软件架构动态设计 软件分层架构设计 软件架构设计安全机制错误探测的安全机制 其中:数据的范围检查指输入输出数据的范围进行检查,例如:在程序中我们可以通过数据范围来排除数据的正确性;合理性检查 例如:使用参

weixin_36460584的博客 511

程序设计竞赛OJ平台代码提交中G++编译和C++编译的区别及注意事项

G++和C++编译的区别 G++ 输出double类型时,scanf用%lf,printf用%f double a = 0.0; scanf("%lf", &a); printf("%f\n", a); 对于64位整数,申请时用_int64,scanf用%I64d,pirntf用%I64d _int64 b = 2e50; scanf("%I64d", &b); printf("...

左云帆 403

YOLO26涨点改进 |独家创新,小目标涨点改进篇 | Arxiv 2025 | MHAF‑YOLO,引入RepHMS高效特征提取模块,适合轻量级目标检测、小目标检测、图像分类、旋转目标检测、实例分割

本文提出了一种改进的YOLO26目标检测模型,通过引入RepHMS模块和多分支辅助特征金字塔结构(MAFPN),显著提升了模型性能。RepHMS模块采用多分支异构卷积和重参数化策略,在不增加推理开销的情况下增强多尺度特征提取能力,尤其提升了小目标检测效果。实验表明,改进后的MHAF-YOLO模型在COCO数据集上仅用7.1M参数就达到48.9% AP,相比YOLO11-s参数量减少24.4%而性能提升1.9%。文章详细介绍了RepHMS模块的原理、实现代码及在YOLO26中的集成方法,并提供了两种改进配置。

Ai缝合怪、助力小伙伴高效发论文 199

G++和C++区别和评测注意事项

G++和C++的区别和评测注意事项 下面摘抄自互联网 G++ 首先更正一个概念,C++是一门计算机编程语言,G++不是语言,是一款编译器中编译C++程序的命令而已。 那么他们之间的区别是什么? 在提交题目中的语言选项里,G++和C++都代表编译的方式。准确地说,选择C++的话,意味着你将使用的是最标准的编译方式,也就是ANSI C++编译。如果你使用的是G++的话,意味着你将使用GNU项目中最平凡...

Janspiry 572

保研考研机试攻略:python笔记(4)

保研考研机试攻略:python笔记(4)二分法+最大公约数+最小公倍数+素数判断+幂次方mod方法+匹配问题+哈希算法+哈夫曼编码+二叉树

qq_63349644的博客 1096

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

%llu 64位无符号%d、%u、%x/%X、%o%f、%e/%E或%g/%G

hhd,hhx,hhu, 这几个都是输出8位的, hd, hx, hu, 这几个都是输出16位数据的, d, lx, ld, lu, 这几个都是输出32位的, lld,ll, llu,llx,这几个都是输出64位的, printf( "%llu ",.....) %llu 是64位无符号 %llx才是64位16进制数 Dev-C++下基本数据类型学习小结 环境...

EmbeddedCoder 的优快云博客 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

__int64与long long

//为了和DSP兼容,TSint64和TUint64设置成TSint40和TUint40一样的数 //结果VC中还是认为是32位的,显然不合适 //typedef signed long int TSint64; //typedef unsigned long int TUint64; //ANSI C中规定lon...

weixin_33778778的博客 130

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

OJ上 编译器 G++和C++的区别

原文 :http://blog.youkuaiyun.com/febr2/article/details/52068357 编译时的差异: 编译器优化不同: 举个栗子: ①: a++ ②: ++a 从标准C的角度看:①式是先调用,再自增。在调用过程中,会申请一个新的数据地址,用于存放临时的变量a’,然后在把a’加1,之后在把a’赋值给a。但是②式不会这么麻烦,因为它是先自增,后...

YZ930035683的博客 264

格式化输出一些细节

%d和%u的区别

无尽星空--帝王铠 402

蓝桥杯算法训练之阿尔法乘积(重重点)(long long int的输入与输出)(递归)(do-while与while循环)

问题描述   计算一个整数的阿尔法乘积。对于一个整数x来说,它的阿尔法乘积是这样来计算的:如果x是一个个位数,那么它的阿尔法乘积就是它本身;否则的话,x的阿尔法乘积就等于它的各位非0的数字相乘所得到的那个整数的阿尔法乘积。例如:4018224312的阿尔法乘积等于8,它是按照以下的步骤来计算的:   4018224312 → 418224312 → 3072 → 372 → 42 → 4*2 → 8   编写一个程序,输入一个正整数(该整数不会超过6,000,000),输出它的阿尔法乘积。   输入格式:输

IK_LinKing的博客 1126

long long类型的输入输出格式:%lld和%I64d

关于long long类型的输入输出格式:%lld和%I64d

Talent Q的博客 2万+
上一篇: 51Nod - 1073 约瑟夫环
下一篇: CodeForces - 893C Rumor (并查集)
OneLine_
博客等级 码龄9年 48粉丝 72原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值