C语言中long long的用法 C++ __int64用法 __int64的printf问题

算法竞赛中C++数据类型选择:从int溢出到long long实战避坑指南 在编程和算法竞赛中,数据类型是构建程序的基础模块,它定义了变量在内存中的存储方式和可表示的范围。其核心原理在于计算机使用固定大小的内存单元(如字节)和特定的编码规则(如二进制补码)来表示数据,这直接决定了数据的精度和边界。深入理解数据类型的价值在于确保程序的正确性、效率和可移植性,避免因溢出、精度损失或平台差异导致的隐蔽错误。在算法竞赛、系统编程和高性能计算等应用场景中,合理选择数据类型尤为关键,例如在处理大整数运算时,int类型可能因溢出导致结果错误,而long long或int64_t则能提供更大的安全 阅读详情
C语言中long long的用法

在分析BT代码的过程中,遇到了这样的定义:long long line_position;很是纳闷,在C语言中我还没有见过这样的写法,网上搜了,资料也很少,最后在C语言标准与实现这本书中找到了关于long long的说法。在C语言的C99标准扩展了新的整数类型 long long,long是32位宽,占4个字节,long long通常被定义成 64 位宽,也就可以实现了在32位机器上可以扩展8字节的数据,GUN C也支持,当然在64位平台上就存在这个问题了。C99标准并没有硬性规定具体到某种平台上的某种整数类型究竟占用多少字节、能够表示多大范围的数值等, 只是给出一条原则和一个参考数值集合,只要同时满足这两方面条件就算是符合 C 标准。
之后,我查看了C99标准:
—The rank of long long int shall be greater than the rank of long int,which
shall be greater than the rank of int,which shall be greater than the rank of short
int,which shall be greater than the rank of signed char.

意思是说:
long long 的级别高于 long ,long 的级别高于 int ,int 的级别高于 short ,short 的级别高于 char 。(另外有 _Bool 永远是最低级别)。级别高的整数类型的宽度大于等于级别较低的整数类型。


编译long long需要支持C99标准的编译器才行,VC并不支持,但有对应的类型__int64


C++ __int64用法



  在做ACM题时, 经常都会遇到一些比较大的整数。而常用的内置整数类型常常显得太小了:其中long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647。而unsigned范围是[0,2^32),即0~4294967295。也就 是说,常规的32位整数只能够处理40亿以下 的数。
  那遇 到比40亿要大的数怎么办呢?这时就要用到C++的64位扩展 了。不同的编译器对64位整数的扩展有所不同。基于ACM的需 要,下面仅介绍VC6.0与g++编译器的 扩展。
  VC的64位整数 分别叫做__int64与unsigned __int64,其范 围分别是[-2^63, 2^63)与[0,2^64),即-9223372036854775808~9223372036854775807与0~18446744073709551615(约1800亿亿)。对64位整数 的运算与32位整数基本相同,都支持四则运算与位运算等。当进行64位与32位的混 合运算时,32位整数会被隐式转换成64位整 数。但是,VC的输入输出与__int64的兼容 就不是很好了,如果你写下这样一段代码:
1 __int64 a;
2 cin >> a;
3 cout << a;

那么,在 第2行会收到“error C2679: binary '>>' : no operator defined which takes a right-hand operand of type '__int64' (or there is no acceptable conversion)”的错 误;在第3行会收到“error C2593: 'operator <<' is ambiguous”的错误。那是不是就不能进行输入输出呢?当然不是,你可以使用C的写 法:
scanf("%I64d",&a); //此处是大写 i
printf("%I64d",a);
就可以正确输入输出了。当使用unsigned __int64时,把"I64d"改为"I64u"就可以 了。
  OJ通常使 用g++编译器。其64位扩展方 式与VC有所不同,它们分别叫做long long 与 unsigned long long。处理规 模与除输入输出外的使用方法同上。对于输入输出,它的扩展比VC好。既可以使用
1 long long a;
2 cin>>a;
3 cout<<a;
也可以使用
scanf("%lld",&a);
printf("%lld",a);

使用无符号数时,将"%lld"改成"%llu"即可。
  最后我补充一点:作为一个特例,如果你使用的 是Dev-C++的g++编译器,它使用的是"%I64d"而非"%lld"。


__int64的printf问题!


把Linux的东西移植到Windows 下, 问题真是多, 有时候感觉很是奇怪! 今天有遇到了一个!

__int64在 Windows下怎么输出的问题? 我还以为是强制转换的时候出问题了, 查了好长时间!

下 面是测试代码, 已经通过Windws, Linux两个平台的测试了!



#include <stdio.h>

#ifdef _WIN32
typedef unsigned __int64 uint64_t;
#else
typedef unsigned long long uint64_t;
#endif

typedef unsigned int uint32_t;
typedef unsigned short uint16_t;
typedef unsigned char uint8_t;

int main(int argc, char *argv[])
{
uint32_t t321, t322, t323;
uint64_t t641, t642, t643;
uint8_t *p;

uint8_t t[64] =
{
0x4E, 0x7C, 0x00, 0x00, 0x00, 0x00,
0x4E, 0x7C, 0x00, 0x00, 0x00, 0x00, 
0x04, 0x00, 0x00, 0x00, 0x00, 0x00
};

printf(
"sizeof(uint64_t) = %d\n"
"sizeof(uint32_t) = %d\n"
, sizeof(uint64_t), sizeof(uint32_t));

p = t;
t321 = *(uint32_t *)p; p += 6;
t322 = *(uint32_t *)p; p += 6;
t323 = *(uint32_t *)p; p += 6;

printf("t321[%X].%d t322[%X].%d t323[%X].%d\n"
, t321, t321, t322, t322, t323, t323);

p = t;
t641 = *(uint32_t *)p; p += 6;
t642 = *(uint32_t *)p; p += 6;
t643 = *(uint32_t *)p; p += 6;

#ifdef _WIN32
printf("t641[%I64X].%I64d t642[%I64X].%I64d t643[%I64X].%I64d\n"
, t641, t641, t642, t642, t643, t643);
#else
printf("t641[%llX].%lld t642[%llX].%lld t643[%llX].%lld\n"
, t641, t641, t642, t642, t643, t643);
#endif

t641 = 0x1122334455667788;

#ifdef _WIN32
printf("%I64X %I64d \n", t641, t641);
#else
printf("%llX %lld \n", t641, t641);
#endif

return 0;
}


/*
Test Env:
    Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
    Microsoft Windows 2000 [Version 5.00.2195]

Result:
sizeof(uint64_t) = 8
sizeof(uint32_t) = 4
t321[7C4E].31822 t322[7C4E].31822 t323[4].4
t641[7C4E].31822 t642[7C4E].31822 t643[4].4
1122334455667788 1234605616436508552

--------------------------------------
Test Env:
    gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-47.3)

Result:
sizeof(uint64_t) = 8
sizeof(uint32_t) = 4
t321[7C4E].31822 t322[7C4E].31822 t323[4].4
t641[7C4E].31822 t642[7C4E].31822 t643[4].4
1122334455667788 1234605616436508552
*/

在 进行移植的时候可能用的上的:
#ifdef _WIN32
#  define APR_UINT64_T_HEX_FMT     "llx"
#else
#  define APR_UINT64_T_HEX_FMT     "I64x"
#endif

example:
     sprintf(buf, "%" APR_UINT64_T_HEX_FMT, var);

#define HOST_WIDEST_INT_PRINT_DEC       "%I64d" 
#define HOST_WIDEST_INT_PRINT_UNSIGNED  "%I64u" 
#define HOST_WIDEST_INT_PRINT_HEX       "0x%I64x"
【Ragflow】9.问答为什么比搜索响应慢?从源码角度深入分析 前几天看到有群友提到一个现象:Ragflow的搜索界面的问答速度很快,但聊天界面的问答速度很慢,究竟是什么原因?在深入挖掘源码之后,逐渐发现了问题的答案。 阅读详情

相关推荐

时间卷积网络(TCN):结构+pytorch代码

文章目录TCNTCN结构1-D FCN的结构因果卷积(Causal Convolutions)膨胀因果卷积(Dilated Causal Convolutions)膨胀非因果卷积(Dilated Non-Causal Convolutions)残差块结构pytorch代码讲解 TCN   TCN(Temporal Convolutional Network)是由Shaojie Bai et al....

Leon_winter的博客 11万+

C语言中long long的用法

C语言中long long的用法 2010年05月31日 星期一 下午 05:53 http://www.awuit.com/c-language-the-usage-of-long-long/ 阿吴 | C/C++ | 十一月, 03 2009 |

junecau的专栏 4万+

STM32F407VET6与CH395Q串口通信实战:从零搭建以太网客户端(附完整代码)

本文详细介绍了基于STM32F407VET6微控制器与南京沁恒微CH395Q以太网芯片,通过串口通信从零搭建TCP客户端应用的完整实战过程。内容涵盖硬件连接、驱动层设计、基于FreeRTOS的任务实现以及核心调试技巧,并提供了完整的代码示例,帮助嵌入式开发者快速实现设备联网功能。

weixin_29179311的博客 413

long long类型

long long在win32中是确实存在,长度为8个字节;定义为LONG64。 记住它表示的是64位即可-----但对于不同的系统,在使用前还是测试一下为好 long long是C++的64位整型的基本类型,“现任”长整型。 long long占用8个字节,数据表示从int的【-2^31,2^31-1],升级到【-2^63,2^63-1】。 long long是C++的正式标准,这也就意味着,该类型不会因为编译器或者开发平台的不同而有所差异,放之四海而皆准,而且与一些系统函数、类库都有很好的交互(如常

baidu_41553551的博客 2万+

AI订单流异常检测:精准识别与闭环处置

本文系统阐述了订单流AI驱动的可视化与异常解释系统的构建策略。核心包括:1)多维度融合的异常检测技术,结合数据指纹、行为图谱和时序分析实现精准识别;2)分级分类与自动化处置机制,通过规则矩阵和风险熵值量化进行智能决策;3)基于SHAP/LIME的可解释性技术,提升决策透明度;4)千万级数据训练要求,确保模型达到87%以上的F1值。系统采用Flink+PAI实时计算架构,支持从异常检测到根因分析的完整闭环,为电商、金融等领域的订单风险管理提供智能化解决方案。

2401_83000568的博客 1360

app编写需要哪种语言

原生App开发:优选Swift(iOS)和Kotlin(Android)。跨平台App开发:优选Flutter(Dart)和React Native(JavaScript)。游戏App开发:优选Unity(C#)和Unreal Engine(C++)。低代码工具:适合简单、快速的App制作。

fanying_98的博客 2070

c语言long和long long的取值范围

溢出和取值范围 C语言的整型溢出问题 整数溢出 int、long int 、long long int 占用字节 《C和指针》中写过:long与int:标准只规定long不小于int的长度,int不小于short的长度。 double与int类型的存储机制不同,long int的8个字节全部都是数据位,而double是以尾数,底数,指数的形式表示的,类似科学计数法,因此double比int能表...

一条二哈 19万+

Vue3 - 手机移动端H5网页强力解决弹起软键盘后页面被挤压变形或页面整体上移问题,点击input输入框键盘弹出底部被上推往上顶遮挡及各种问题(兼容安卓苹果ios手机,微信公众号网页微信内置浏览器)

vue3,h5网页,input输入框组件,vue3 h5软键盘弹出,vue3输入框,键盘弹起时页面整体上移问题,uni,H5页面,解决软键盘弹起页面被挤压、被往顶的问题,解决vue3输入框,键盘弹起时页面整体上移问题,vue3调用手机系统软键盘,页面窗口被顶起,布局定位失效,解决VUE3软键盘弹起导致页面fixed定位元素被顶上去,输入法软键盘弹起,窗口顶起,变形解决办法,Vue中input组件在IOS设备上弹出软键盘时页面整体上移问题的解决方案,以及input组件聚焦后弹出软键盘固定在,Vue3软键盘把界

🏆 前端领域优质创作者 1万+

C语言(CED)与long long相关的知识

在写代码时,有时int、double定义的变量的范围远远小于题目要求的范围,那么现在就是使用long long的时候 1、 long long 是C99标准对整型类型做的一个扩展,每个long long类型的变量可以占8字节,每个字节8位,一共64位。其表示的数范围是-9223372036854775808~9223372036854775807。 2、long long在输出的时候,与int...

Cat 1万+

使用STM32制作智能窗帘控制

以上就是一个简单的基于STM32的智能窗帘控制代码案例。通过感知光线强度和控制步进电机的旋转,我们可以实现智能窗帘的自动开启和关闭。通过定时器的中断来控制步进电机的旋转,从而实现窗帘的开启和关闭动作。最后,我们需要实现主函数和中断函数。在主函数中,我们需要初始化硬件资源,然后进入一个无限循环来不断检测光敏电阻的值,并根据其值来控制窗帘的开启和关闭。接下来,我们需要编写功能函数,用于控制窗帘的开启和关闭。然后,我们需要配置STM32开发环境,并创建一个新的工程。接下来,我们初始化相关的硬件资源。

2401_85258012的博客 276

秃鹰搜索优化算法(BES)详解:从自然捕食到全局优化

秃鹰搜索优化算法(Bald Eagle Search Optimization Algorithm,BES)是由马来西亚学者Alsattar等人于2020年提出的一种新型元启发式优化算法。该算法灵感来源于秃鹰在自然界中高超的捕食行为,特别是其独特的狩猎策略和卓越的视觉搜索能力,模拟了秃鹰捕食鲑鱼等猎物的完整过程。

qq_42212808的博客 1350

C语言_int64用法,C语言中long long的用法 C++ __int64用法 __int64的printf问题

在分析BT代码的过程中,遇到了这样的定义:long long line_position;很是纳闷,在C语言中我还没有见过这样的写法,网上搜了,资料也很少,最后在C语言标准与实现这本书中找到了关于long long的说法。在C语言的C99标准扩展了新的整数类型 long long,long是32位宽,占4个字节,long long通常被定义成 64 位宽,也就可以实现了在32位机器上可以扩展8字节...

weixin_36030121的博客 1436

RT-DETR改进策略【卷积层】| CVPR2025 GBConv轻量门控瓶颈卷积 低秩瓶颈降参 + 门控聚焦形态,强效捕捉纤细目标

裂缝形态不规则、纹理纤细,传统卷积参数大、计算冗余,且无法动态聚焦裂缝形态;背景噪声强易干扰特征提取,需要轻量且能自适应聚焦裂缝形态的卷积单元,因此提出轻量门控瓶颈卷积 GBC。

Limiiiing的博客 140

【转载】C/C++中long long与__int64的区别

在C99标准(详情请猛击:C语言的发展及其版本)中,增加了对64位长整型数据的支持,它的类型就是 long long,占用8个字节。由于C99标准发布较晚,一些较老的C/C++编译器不支持,新编译器对C99的响应也没有想象地积极,导致当前主流的C/C++编译器对64位长整型的支持不统一,形态各异。一般来说,64位整型的定义方式有 long long 和 __int64 两种(VC 6.0 只还支持

howard__hao的博客 619

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

c语言long long int怎么用,在Dev C++下,使用long long int

#include#includeint main(){signed long long int v_signed_long_long_int;unsigned long long int v_unsigned_long_long_int;/*▇ PART1:USE %I64d AND %I64u ▇*//* [-2^63, 2^63-1] ==> [-9223372036854775808,...

weixin_28725959的博客 3278

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

c语言long int怎么定义,关于c ++:定义long long int数组

我试图生成一个从2 ^ 0到2 ^ 63保持2的幂的数组。 我正在使用unsigned long long int。 但是当我打印所有值时,它会打印到2 ^ 30然后它会溢出。 编译器是GNU GCC版本4.8.1。 这是代码。unsigned long long int a[65],i;a[0]=1;for(i=1;i<65;i++) {a[i]=2<printf("i=%d a[i...

weixin_42507868的博客 4644

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

c语言int作用,c语言中int的用法有哪些

c语言中int的用法有哪些C/C++编程语言中,int表示整型变量,是一种数据类型,用于定义一个整型变量,在不同编译环境有不同的大小,不同编译运行环境大小不同下面小编给大家整理了c语言中int的用法,供大家参阅。1. 整型intC 语言提供了很多整数类型(整型),这些整型的区别在于它们的取值范围的大小,以及是否可以为负。int是整型之一,一般被称为整型。以后,在不产生歧义的情况下,我们把整数类型和...

weixin_30739835的博客 1万+

C/C++中long long与__int64的区别

在C99标准(详情请猛击:C语言的发展及其版本)中,增加了对64位长整型数据的支持,它的类型就是 long long,占用8个字节。 由于C99标准发布较晚,一些较老的C/C++编译器不支持,新编译器对C99的响应也没有想象地积极,导致当前主流的C/C++编译器对64位长整型的支持不统一,形态各异。 一般来说,64位整型的定义方式有 long long 和 __int64 两种(V

yxjhaha的博客 655

c++之long long 和 \_\_int64

同理,cout 也会有类似的问题。第二种解释是 cout 在输出之前会把要输出的内容先存入缓存区,中间多了一个步骤,也会带来性能的降低。对于一般的 C++开发者来说,其实这个问题不那么要紧,因为在实际开发当中,绝大多数情况使用 32 位的 int 就足够应付了。很有可能导致同样的题目,同样的算法,别人通过了,但是我们却超时了的情况。又有一个问题,它们是 C 语言的标准输入输出方式,需要提供标识符来代表变量的类型,那么问题来了。因为在算法竞赛当中,尤其是当数据量很大的时候,读入和输出占据的时间是非常可观的。

simple的博客 774

C/C++编程报错合集(2):C6328 :大小不匹配 :已将_int64作为__Param_(2)传递,但需要使用int来调用printf

输入输出占位符%d代表int(4bytes),%ld代表long int(>=4bytes),%lld代表long long int(8bytes)。sizeof运算符返回的结果是一个64位(即8bytes)的无符号整型,所以占位符应该是%lld。官网解释:此警告指示格式说明符所需的类型和传入的表达式的。能输出但会报错,将printf中的输出改成对应格式即可。以上错误修改成%lld即可。大家一起学,一起进步!

颜安青的小世界 1521

C语言标准C99

先简单介绍下C语言的标准. C语言的发展历史大致上分为三个阶段:Old Style C、C89和C99.Ken Thompson和Dennis Ritchie发明C语言时有很多语法和现在并不一样,但为了向后兼容性(Backward Compatibility), 这些语法仍然在C89和C99中保留下来了.C89是最早的C语言规范,于1989年提出,1990年先由ANSI(美国国家标准委员会,American National Standards Institute)推出ANSI版本,后来被...

gllmofan的博客 1万+

嵌入式 LinuxC如何打印64bit的longlong整型int64_t

64位无符号整型打印方式: #include   unsigned long long ll=0x9102928374747474;  void main()  {           printf("**************\n");           printf("%x,%llx\n",ll,ll);           printf("%llu\n",ll);

skdkjxy的专栏 1626

linux longlong大小,嵌入式 Linux C如何打印64bit的longlong整型int64_t

64位无符号整型打印方式:#includeunsigned long long ll=0x9102928374747474;void main(){printf("**************\n");printf("%x,%llx\n",ll,ll);printf("%llu\n",ll);printf("**************\n");}整型不同长度小常识温故:d,lx,ld,,lu,这...

weixin_33513255的博客 936

linux c long int64,嵌入式 Linux C如何打印64bit的longlong整型int64_t

嵌入式 Linux C如何打印64bit的longlong整型int64_t64位无符号整型打印方式:#includeunsigned long long ll=0x9102928374747474;void main(){printf("**************\n");printf("%x,%llx\n",ll,ll);printf("%llu\n",ll);printf("*******...

weixin_39904522的博客 563

__int64的printf问题!

<br />原帖:http://blogold.chinaunix.net/u/19782/showart_403061.html<br /> 把Linux的东西移植到Windows 下, 问题真是多, 有时候感觉很是奇怪! 今天有遇到了一个!<br /><br />__int64在Windows下怎么输出的问题? 我还以为是强制转换的时候出问题了, 查了好长时间!<br /><br />下面是测试代码, 已经通过Windws, Linux两个平台的测试了!<br /><br /><br />#includ

xhhjin的专栏 5042

java long输出_输出错误long类型

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

weixin_35659005的博客 1481
下一篇: getchar()和文件结束标志EOF
PiCheeng
博客等级 码龄15年 3粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值