Ⅰ C語言中如何輸出長整型數值
在C/C++中,64為整型一直是一種沒有確定規范的數據類型。現今主流的編譯器中,對64為整型的支持也是標准不一,形態各異。一般來說,64位整型的定義方式有long long和__int64兩種(VC還支持_int64),而輸出到標准輸出方式有printf(「%lld」,a),printf(「%I64d」,a),和cout << a三種方式。
本文討論的是五種常用的C/C++編譯器對64位整型的支持,這五種編譯器分別是gcc(mingw32),g++(mingw32),gcc(linux i386),g++(linux i386),Microsoft Visual C++ 6.0。可惜的是,沒有一種定義和輸出方式組合,同時兼容這五種編譯器。為徹底弄清不同編譯器對64位整型,我寫了程序對它們進行了評測,結果如下表。
上表中,正確指編譯通過,運行完全正確;錯誤指編譯雖然通過,但運行結果有誤;無法編譯指編譯器根本不能編譯完成。觀察上表,我們可以發現以下幾點:
long long定義方式可以用於gcc/g++,不受平台限制,但不能用於VC6.0。
__int64是Win32平台編譯器64位長整型的定義方式,不能用於Linux。
「%lld」用於Linux i386平台編譯器,」%I64d」用於Win32平台編譯器。
cout只能用於C++編譯,在VC6.0中,cout不支持64位長整型。
表中最後一行輸出方式中的printint64()是我自己寫的一個函數,可以看出,它的兼容性要好於其他所有的輸出方式,它是一段這樣的代碼:
CPP
void printint64(long long a)
{
if (a<=100000000)
printf("%d ",a);
else
{
printf("%d",a/100000000);
printf("d ",a0000000);
}
}
這種寫法的本質是把較大的64位整型拆分為兩個32位整型,然後依次輸出,低位的部分要補0。看似很笨的寫法,效果如何?我把它和cout輸出方式做了比較,因為它和cout都是C++支持跨平台的。首先printint64()和cout(不清空緩沖區)的運行結果是完全相同的,不會出現錯誤。我的試驗是分別用兩者輸出1000000個隨機數,實際結果是,printint64()在1.5s內跑完了程序,而cout需要2s。cout要稍慢一些,所以在輸出大量數據時,要盡量避免使用。
Ⅱ 什麼是整型數
整型()數據是不包含小數部分的數值型數據,用字母I表示。整型數據只用來表示整數,以二進制形式存儲。分類:
1、char:字元型數據,屬於整型數據的一種,佔用一個位元組。
2、unsigned char:無符號字元型數據,屬於整型數據的一種,佔用一個位元組。
3、short:短整型數據,屬於整型數據的一種,佔用兩個位元組。
4、unsigned short:無符號短整型數據,屬於整形數據的一種,佔用兩個位元組。
5、int:整型數據,屬於整型數據的一種,佔用四個位元組。
6、unsigned int:無符號整型數據,屬於整型數據的一種,佔用四個位元組。
7、long:長整型數據,屬於整型數據的一種,佔用四個位元組。
8、unsigned long:無符號長整型數據,屬於整形數據的一種,佔用四個位元組。
(2)長整形數顯示多少擴展閱讀:
整型數據分類:
基本型:類型說明符為int,在內存中佔4個位元組(不同系統可能有差異,此處原為2,經查證windows系統下為4,VAX系統也如此) ,其取值為基本整常數。
短整型:類型說明符為short int或short'C110F1。所佔位元組和取值范圍會因不同的編譯系統而有差異。對於16字機,short int 佔2個位元組,在大多數的32位機中,short int 佔4個位元組。但總的來說,short int 至少16位,也就是2個位元組。
長整型:類型說明符為long int或long ,在內存中佔4個位元組,其取值為長整常數。在任何的編譯系統中,長整型都是佔4個位元組。在一般情況下,其所佔的位元組數和取值范圍與基本型相同。
無符號型:類型說明符為unsigned。在編譯系統中,系統會區分有符號數和無符號數,區分的根據是如何解釋位元組中的最高位,如果最高位被解釋為數據位,則整型數據則表示為無符號數。
Ⅲ C語言長整型常數,什麼是長整型常數
長整型數是相對於基本整型數而言的,一般它佔用的存儲空間是基本整型數的2倍。具體大小隨不同的編譯器而不同。如果它的存儲空間是k個位元組,可存儲數的范圍是-2^(8k-1)~+2^(8k-1)-1。
整型變數可分為以下幾類:
1.基本型
類型說明符為int,根據計算機的內部字長和編譯器的版本,在內存中可能佔2或4個位元組(通常分別在16位機和32位機上),其取值為基本整常數。
2.短整型
類型說明符為short int或short,在內存中佔2個位元組,其取值為短整常數。
3.長整型
類型說明符為long int或long,在內存中佔4個位元組,其取值為長整常數。
4.64位整型(非ANSI標准)
類型說明符為__int64、long long int或long long,在內存中佔8個位元組,其取值為64位整常數。
5.無符號型
類型說明符為unsigned。它可以單獨使用代表unsigned int,也可以作為前綴,都表示無符號整數,即永遠為非負的整型變數,大於0的數據范圍約擴大為原來的2倍。各種無符號類型量所佔的內存空間位元組數與相應的有符號類型量相同。但由於省去了符號位,故不能表示負數。下表列出了Turbo C中各類整型量所分配的內存位元組數及數的表示範圍。
整數的後綴
可以用後綴「L」或「l」來表示長整型數。例如:
十進制長整型數:158L (十進制為158)、358000L (十進制為358000);
八進制長整型數:012L (十進制為10)、077L (十進制為63)、0200000L (十進制為65536);
十六進制長整型數:0X15L (十進制為21)、0XA5L (十進制為165)、0X10000L (十進制為65536)。
長整型數158L和基本整型數158 在數值上並無區別。但對158L,因為是長整型數,C編譯系統將為它分配4個位元組存儲空間。而對158,因為是基本整型,只分配2 個位元組的存儲空間。因此在運算和輸出格式上要予以注意,避免出錯。
無符號數也可用後綴表示,整型數的無符號數的後綴為「U」或「u」。例如:358u、0x38Au、235Lu均為無符號數。
前綴,後綴可同時使用以表示各種類型的數。如0XA5Lu表示十六進制無符號長整型數A5,其十進制為165。
Ⅳ C語言問題。編寫程序,輸入一個長整型正數,判斷該數是幾位數
^#include<stdio.h>
#include<math.h>
main()
{
long int x;
int i=0;
printf("input:");
scanf("%ld",&x);
do{
x=x/10;
i++;
}while(x>0);
printf("the nubmer is:%d\n",i);
}
這樣就正確了,你自己運行下^_^
註: 除法運算符「/」:雙目運算具有回左結合性。參答與運算量均為整型時,結果也為整型,捨去小數。例如,你輸入123456 先執行123456/10 結果為12345 在繼續執行12345/10 結果為1234...........最後為1/10 結果為0 不滿足條件x>0 結束循環,列印i的值^_^
Ⅳ 長整型的范圍是多少
在vc中,long范圍等於int,4個位元組,2的32方;如果處理2^54,只能用__int64
不同編譯器long的范圍可以不一樣,
Ⅵ 整型數范圍是長整型數范圍是
不同的編譯系統下,結果不同。在VC++下,整數與長整數范圍一樣,都是:
-2^31到2^31-1
2^31表示2的31次方。
Ⅶ 長整型數據范圍是怎麼得出來的
單片機一般是8位,整數0~255
有時太小,C語言規定出:
整型int是16位,佔2位元組0~65536
長整型long是32位,佔4位元組0~2的32次方-1
Ⅷ C語言中長整形4個位元組的數據范圍是多少
有些是有差別的,具體要看編譯器
char/signed
char/unsigned
char:
1個位元組;
char*(即指針變數):
2個位元組(16位編專譯屬器)
4個位元組(32位編譯器)
8個位元組(64位編譯器)
short
int:
2個位元組
int/unsigned
int:
2個位元組(16位編譯器)
4個位元組(32/64位編譯器)
long
int:
4個位元組
float:
4個位元組
double:
8個位元組
long/unsigned
long:
4個位元組(16/32位編譯器)
8個位元組(64位編譯器)
long
long:
8個位元組
指針4個位元組(32位編譯器)
Ⅸ 數字數據類型中,長整型數字類型的欄位長度是幾個位元組
VB中的長整型
Long(長整型)變數存儲為 32 位(4 個位元組)有符號的數值形式,其范圍從 -2,147,483,648 到 2,147,483,647(約為21億)。
Ⅹ 長整型數據(long i;)占幾個位元組double c;呢占幾個位元組
long
佔4個位元組
double
8個位元組用64位二進製表示
數值表示範圍
±(1.7*10-308~~1.7*10308)