首页 > 编程知识 正文

C 的64位整数[原]by 赤兔

时间:2023-05-03 17:15:50 阅读:158337 作者:450

的64位整数[元]by赤兔正文转自http://www.cn itblog.com/cockerel/archive/2006/08/16/15356.html

做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编译器的扩展。

VCVC6.0的64位整数分别称为__int64和unsigned __int64,其范围分别为[-2 ^ 63,2 ^ 63 ]和[ 0,2 ^ 64 ],- 92233720364 64位和32位混合运算会将32位整数隐式转换为64位整数。 但是,VC的输入输出与__int64的兼容性不好。 如果编写了这样的代码:

1 __int64a;

2 cin a;

3 cout a;

那么,在第二行中,“errorc 26793360 binary ' ' : nooperatordefinedwhichtakesaright-handoperandoftype ' _ int 64 ' (orthereisno )” 第三行接收“错误259: ' operator ' is ambiguous”错误。 那个不能输入输出吗? 当然,也可以用C的写法:

scanf('%I64d ',a );

printf('%I64d ',a ); 就可以正确输入输出了。 如果要使用unsigned __int64,则可将“I64d”更改为“I64u”。

OJ通常使用g编译器。 其64位扩展方式与VC不同,分别被称为长龙和无符号长龙。 处理规模与输入输出以外的使用方法相同。 关于输入输出,扩展性比VC高。 哪个都可以使用

1龙龙;

2 cin a;

3 cout a; 也可以使用

scanf('%lld ),a );

printf('%lld ',a );

如果要使用无符号数字,请将“%lld”更改为“%llu”。

在最后添加。 作为特例,如果使用的是Dev-C的g编译器,请使用“%I64d”而不是“%lld”。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。