_int64类型的使用

范围

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)作为输出将会发生错误!

 

注意事项

  1. __int64关键字和I64标号确实是MS专有的。标准C用long long和%lld。所以在Unix、Linux、Cygwin下编程就应该用标准的用法了。
  2. 在32 位Intel 计算机上分配64 位值不是原子操作;即该操作不是线程安全的,多线程读写必须加锁,类似于double类型。这意味着,如果两个人同时将一个值分配给一个静态_Int64 字段,则该字段的最终值是无法预测的。
  3. _int64不能用作为循环变量

 

 

参考:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章