关于__int64的使用!

类型  long long __int64 intmax_t
格式 %lld %I64d %I64d

在Dev C++中,三种类型均需用%I64d格式输出 ,c语言中intmax_t需要用到头文件stdint.h

C++采用cin输入时,两种类型均可。

eg1 eg2 eg3
#include<stdio.h>
int main()
{
  long long a;   scanf("%I64d",&a);
  print("%I64d\n",a);   system("pause");
  return 0;
}
#include<stdio.h>
int main()
{
  __int64 a;   scanf("%I64d",&a);
  printf("%I64d\n",a);
  
  system("pause");
  return 0;
}
#include<stdio.h>
#include<stdint.h>
int main()
{
  intmax_t a;   scanf("%I64d",&a);
  printf("%I64d\n",a);   system("pause");
  return 0;
}
eg4 eg5 eg6
#include<stdio.h>
#include<stdint.h>
int main()
{
  intmax_t a,b;
  
  cin>>a>>b;
  cout<<a+b<<endl;
  system("pause");
  return 0;
}
#include<iostream>
using namespace std;
int main()
{
  long long a,b;
  
  cin>>a>>b;
  cout<<a+b<<endl;
  system("pause");
  return 0;
}
#include<iostream>
using namespace std;
int main()
{
  intmax_t a,b;
  
  cin>>a>>b;
  cout<<a+b<<endl;
  system("pause");
  return 0;
}

在做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”的错误。cout,cin对于__int64无能为力,写法较复杂,不过也经常不用。那是不是就不能进行输入输出呢?当然不是,你可以使用C的写法:
scanf("%I64d",&a);
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"即可。

最新文章

  1. Email系列(QQ邮箱 + 含附件的邮箱案例 + 项目实战)
  2. sql server 锁
  3. 带你玩转JavaWeb开发之四 -如何用JS做登录注册页面校验
  4. node.js 安装express 提示 command is not found
  5. BZOJ 1501 智慧珠游戏
  6. 【性能优化】优化笔记之一:图像RGB与YUV转换优化
  7. MySQL查询随机数据的4种方法和性能对比
  8. (6)Xamarin.android google map v2
  9. 王立平--Unity中间GUI Skin
  10. 【转】Directx11 HelloWorld之HLSL的Effect框架的使用
  11. U3d keyCode值对应的按键
  12. 敏捷冲刺每日报告三(Java-Team)
  13. Android的AdapterViewFlipper和Stackview-android学习之旅(三十)
  14. day 10函数二
  15. elipse使用,Java和Javaee模式区别
  16. 安装Androidsdudio时
  17. windows服务器的误解
  18. 去“BAT”这样面试,拿到offer的几率是80%(转)
  19. html开发环境
  20. Spring(AbstractRoutingDataSource)实现动态数据源切换

热门文章

  1. ASP.NET MVC 使用 Log4net 记录日志
  2. 关于Entity Framework的概念及搭建
  3. redis ERR This instance has cluster support disabled
  4. 机器学习与Tensorflow(3)—— 机器学习及MNIST数据集分类优化
  5. linux shell使用别名,切换当前目录
  6. SQL将原始数据进行MD5加密转存
  7. 【rocketMQ】1、搭建MQ服务器,生产一个订单与消费一个订单
  8. opencv2函数学习之blur,GaussianBlur,medianBlur和bilateralFilter:实现图像平滑处理
  9. Flyweight享元模式(结构型模式)
  10. 03-03:springBoot 整合thymeleaf