int类型范围为[-2^31,2^31),即-2147483648~2147483647,unsigned类型范围为[0,2^32),即0~2147483648,当需要表示的整数小于10位时可以使用。
当需要表示的整数大于10位时,使用int类型将会出现溢出,此时可以使用_int64类型。_int64类型范围为[-2^63,2^63),即-9223372036854775808~9223372036854775807,可以表示19位以下的整数,unsigned _int64范围为[0,2^64),即0~18446744073709551616,可以表示20位以下的正整数。
将一个int类型的对象赋值给_int64类型对象时,将会对int进行类型转换。需要注意的是以下情况:
#include<stdio.h> void main(){ _int64 a = -sizeof(int); printf("%I64d\n",a); }
输出为:
4294967292 Press any key to continue
原因是在编译阶段,-sizeof(int)被当成一个32位的整形对待,二进制表示为:1111 1111 1111 1111 1111 1111 1111 1100(-4的二进制表示)。而__int64是一个64位的,所以完全可以把1111 1111 1111 1111 1111 1111 1111 1100存放下来,而不发生数据截断。所以此时1111 1111 1111 1111 1111 1111 1111 1100被解释成4294967292,而不是-4!
参考:http://www.cnblogs.com/chenkunyun/archive/2012/05/17/2506169.html
输入输出需要使用c标准的输入输出方式,不能使用cin>>作为输入,标准方式如下:
#include<stdio.h> void main(){ _int64 a; scanf("%I64d",&a); printf("%I64d\n",a); }
需要注意如果使用了scanf("%d",&a)作为输入或者使用printf("%d",a)作为输出将会发生错误!
参考:
http://tangfeng.iteye.com/blog/421653
http://www.cnitblog.com/cockerel/archive/2006/08/16/15356.html
http://baike.baidu.com/view/1235293.htm
http://topic.csdn.net/u/20101217/14/05cb2e93-03e9-4f77-be65-9241393c1df3.html