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進行型別轉換。需要注意的是以下情況:
#includevoid main()
輸出為:
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!
參考:
輸入輸出需要使用c標準的輸入輸出方式,不能使用cin>>作為輸入,標準方式如下:
#includevoid main()
需要注意如果使用了scanf("%d",&a)作為輸入或者使用printf("%d",a)作為輸出將會發生錯誤!
__int64關鍵字和i64標號確實是ms專有的。標準c用long long和%lld。所以在unix、linux、cygwin下程式設計就應該用標準的用法了。
在32 位intel 計算機上分配64 位值不是原子操作;即該操作不是執行緒安全的,多執行緒讀寫必須加鎖,類似於double型別。這意味著,如果兩個人同時將乙個值分配給乙個靜態_int64 字段,則該字段的最終值是無法**的。
_int64不能用作為迴圈變數
參考:
關於 int64型別使用的一點感受
今天要生成乙個20g的單詞檔案,遇到資料邊界的問題,這裡記下。要生成這個20g的檔案,我首先從乙個檔案裡面讀取了一定量的單詞,放在緩衝區裡面,然後重複把這個緩衝區寫入檔案。這裡我需要計算出迴圈的次數,如果這麼寫 int64 k 20 20gb的檔案需要迴圈的次數 k 20 1024 1024 102...
int64的讀寫操作是否具有原子性質
在x86 64機器上,int64的讀寫操作是否具有原子性?假設變數val是int64,現在有兩個執行緒,執行緒writer只負責向val寫入資料,執行緒reader只負從val讀取資料 假設val當前值為0x0102030405060708 writer執行緒正在執行寫操作,將資料0x0000111...
Opencv FlOAT64型別Mat訪問錯誤
最近在寫影象拼接的演算法,由於需要對變換矩陣homo進行一定的處理,需要對float64型mat元素進行改變,查了許多資料有很多好用的,比如說這個 但是我一使用就報錯 homo cv findhomography imagepoints2,imagepoints1,cv ransac cv mat ...