64位整数全解

64位整数全解

ID:39463540

大小:34.00 KB

页数:3页

时间:2019-07-03

64位整数全解_第1页
64位整数全解_第2页
64位整数全解_第3页
资源描述:

《64位整数全解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、64位整形引起的混乱主要在两方面,一是数据类型的声明,二是输入输出。首先是如果我们在自己机器上写程序的话,情况分类如下:(1)在win下的VC6.0里面,声明数据类型的时候应该写作__int64a;输入输出的时候用%I64dscanf(”%I64d”,&a);printf(”%I64d”,a);(2)在linux下的gcc/g++里面,数据类型声明写作longlonga;输入输出时候用%lld(3)在win下的其它IDE里面[包括高版本VisualStudio],数据类型声明用上面两种均可输入输出用%I64d==================以下可无视==========

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

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

4、g了。关于使用printf的输入输出,这里就有一个更囧的情况。实际上只要记住,主要的区分在于操作系统:如果在win系统下,那么无论什么编译器,一律用%I64d;如果在linux系统,一律用%lld。这是因为MS提供的msvcrt.dll库里使用的就是%I64d的方式,尽管Dev-Cpp等在语法上支持标准,但也不得不使用MS提供的dll库来完成IO,所以就造成了这种情况。====================无视至此===========================那么对ACMer来说,最为关心的就是在各个OJ上交题应分别使用哪种方式了。其实方式只有有限的几种:如果服务

5、器是linux系统,那么定义用longlong,IO用%lld如果服务器是win系统,那么声明要针对编译器而定:+如果用MS系列编译器,声明用__int64[现在新版的VisualStudio也支持longlong了]+如果用MinGW环境,声明用longlong+无论什么编译器,IO一律%I64d下面把各大OJ情况列表如下:1.TOJ:Linux系统2.ZOJ:Linux系统3.POJ:Win系统,语言如选择C/C++,则用MS编译器[支持两种声明],如选择GCC/G++,则为MinGW4.UVa:Linux系统5.Ural:Win系统,MS编译器[支持两种声明]6.SP

6、OJ:Linux系统7.SGU:Win系统,MS编译器[支持两种声明]如果有不太清楚的情况可以先看看各OJ上的FAQ,通常会有说明。另外,为了避免混乱,当数据量不大时,用cin,cout进行输入输出也是一种选择1.int错误经历:自己在作Equiptment Box时,因为输入数据长、宽均是小于50000的整数,因此就使用int来作输入。这本身没有问题,但在求其斜边长时,使用的是sqrt(x * x + y * y),表面看是没有问题,但结果一直是Wrong Answer。 后来将这一行改为pow( (pow(x, 2) + pow( y,3 ) ) , 0.5),就Acc

7、ept了!错误原因:后来经johnbill和hewei的分析,x,y本身没有问题,不会越界,但使用sqrt(x*x + y*y)时,里面的x*x 和 y*y则会超出int范围,造成溢出。而pow会将参数自动转换为double,就不会出错。避免:(1)以后均使用pow进行运算。(习惯)         (2)运算时,注意做强行转换。(比较麻烦)(3)不管输入给的类型,直接用double来存储,就不会溢出了。这种方法表面看没有问题,但直到这次比赛,才发现了一个很严重的问题!2、double遇到过的问题错误经历因为 do

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。