_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

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