A. C語言中說的浮點型是什麼意思呢
C語言中說的浮點型就是帶小數點的數,也就是小數。(只是在計算機領域中「浮點型」是小數的專業替代名詞)
(1)不同的編譯器整形到浮點相同嗎擴展閱讀:
在計算機系統的發展過程中,曾經提出過多種方法表示實數,但是到目前為止使用最廣泛的是浮點表示法。相對於定點數而言,浮點數(浮點型)利用指數使小數點的位置可以根據需要而上下浮動,從而可以靈活地表達更大范圍的實數。
B. C語言中整型,字元型,浮點型,和雙精度浮點型,詳解
整型,計算機中的一個基本的專業術語,指沒有小數部分的數據。整型可以用十進制,十六進制或八進制符號指定,前面可以加上可選的符號(- 或者 +)。包括整型常量和整型變數,整型變數又包括短整型、基本整型、長整型,它們都分為有符號和無符號兩種版本,是一種智能的計算方式。
字元型量包括字元常量和字元變數。字元串常量由一對雙引號括起的字元序列。字元變數的取值是字元常量,即單個字元。字元變數的類型說明符是char。字元變數類型說明的格式和書寫規則都與整型變數相同。
浮點型利用指數使小數點的位置可以根據需要而上下浮動,從而可以靈活地表達更大范圍的實數。
雙精度浮點型,此數據類型與單精度數據類型(float)相似,但精確度比float高,編譯時所佔的內存空間依不同的編譯器而有所不同,是double float數據類型,C/C++中表示實型變數的一種變數類型。
(2)不同的編譯器整形到浮點相同嗎擴展閱讀
雙精度浮點型類型數值可轉換到其他類型的整數或浮點數,反之亦然。雙精度浮點型常量的最後一個字元可加上「d」或「D」。其存儲格式與浮點型類似,最高位為符號位,次高11位為指數位,其次52位為尾數。
雙精度型就是雙精度浮點型,同數值型比,它能提供更高的數值精度,採用固定存儲長度的浮點數形式,每個雙精度浮點型數據佔8個位元組。與數值型數據不同,它的小數點位置是由輸入的數據值來決定的,並且只能用於表中的欄位。
C. 整型、浮點型和字元型有什麼不同點
1.整型數據類型
C定義了5種整型數據類型。
整型數據類型表
序號 類型名稱 說明 位元組數 取值范圍
1 signed char 有符號的單位元組整數類型 1 -128~+127
2 short int 短整型 2 -32768~+32767
3 int 整型 4 -2147438648~+2147438647
4 long int 長整型 4 -2147438648~+2147438647
5 long long int 長長整型 8 -9223372036854775808~+-9223372036854775807
例 輸出各種整型類型的位元組數
#include
int main(void) {
printf("sizeof(signed char) = %d/n", sizeof(signed char));
printf("sizeof(short int) = %d/n", sizeof(short int)); /* sizeof的結果都是int型 */
printf("sizeof(int) = %d/n", sizeof(int));
printf("sizeof(long int) = %d/n", sizeof(long int));
printf("sizeof(long long int) = %d/n", sizeof(long long int));
return 0;
}
編譯和運行結果
[root@localhost ccc]# gcc c15.c
[root@localhost ccc]# ./a.out
sizeof(signed char) = 1
sizeof(short int) = 2
sizeof(int) = 4
sizeof(long int) = 4
sizeof(long long int) = 8
程序說明:sizeof是位元組操作符,使用方式,sizeof(數據類型)。sizeof的作用是得到數據類型所佔的位元組數。我們運行程序使用的環境是Redhat 5 Linux,編譯器是GCC。
2.無符號整數類型
對應有符號類型,還有無符號整數類型。
無符號整數類型表
序號 類型名稱 位元組數 取值范圍
1 unsigned char 1 0~255
2 unsign short int 2 0~65535
3 unsigned int 4 0~4294967295
4 unsigned long int 4 0~4294967295
5 unsign long long int 8 0~18446744073709551615
例 輸出各種無符號整數類型的位元組數
#include
int main(void) {
printf("sizeof(unsigned char) = %d/n", sizeof(unsigned char));
printf("sizeof(unsigned short int) = %d/n", sizeof(unsigned short int)); /* sizeof的結果都是int型 */
printf("sizeof(unsigned int) = %d/n", sizeof(unsigned int));
printf("sizeof(unsigned long int) = %d/n", sizeof(unsigned long int));
printf("sizeof(unsigned long long int) = %d/n", sizeof(unsigned long long int));
return 0;
}
編譯和運行結果
[root@localhost ccc]# gcc c16.c
[root@localhost ccc]# ./a.out
sizeof(unsigned char) = 1
sizeof(unsigned short int) = 2
sizeof(unsigned int) = 4
sizeof(unsigned long int) = 4
sizeof(unsigned long long int) = 8
3.整型常量
整型常量是指用以表示整型數值的常量,分為短整型(short int)、整型(int)、長整型(long int )和長長整型(long long int)四種。C默認整型(int)。 各種類型整型常量進製表示表(後綴不區分大小寫)
序號 數據類型 八進制 十進制 十六進制
1 整型 0112 74 0x4a
2 長整型(l) 0112l 74l 0x4al
3 長長整型(ll) 0112ll 74ll 0x4all
4 無符號整型(u) 0112u 74u 0x4au
5 無符號長整型(ul) 0112ul 74ul 0x4aul
6 無符號長長整型(ull) 0112ull 74ull 0x4aull
4.字元數據類型
C語言中字元型數據只有一種,即char型數據。一般也把char直接稱為字元型。字元型佔用內存空間最少,一般佔用一個位元組,存儲在char類型變數的整數可以表示為有符號或無符號的值,這取決於編譯器。
例 字元型數據類型的位元組長度
#include
int main(void) {
printf("sizeof(char) = %d/n", sizeof(char));
printf("sizeof(signed char) = %d/n", sizeof(signed char));
printf("sizeof(unsigned char) = %d/n", sizeof(unsigned char));
return 0;
}
編譯和運行結果
[root@localhost ccc]# gcc c17.c
[root@localhost ccc]# ./a.out
sizeof(char) = 1
sizeof(signed char) = 1
sizeof(unsigned char) = 1
5.字元變數
字元變數是用於存儲字元型數值的變數。字元型變數也分為兩種:有符號和無符號型。
語法結構:
[signed] char ch1;
[unsigned] char ch2;
例
#include
int main(void) {
char ch1 = '/n';
unsigned char ch2 = '/t';
char ch3 = 48;
printf("ch1 = [%c], [%d]/n", ch1, ch1);
printf("ch2 = [%c], [%d]/n", ch2, ch2);
printf("ch3 = [%c], [%d]/n", ch3, ch3);
return 0;
}
編譯和運行結果
[root@localhost ccc]# gcc c18.c
[root@localhost ccc]# ./a.out
ch1 = [
], [10]
ch2 = [ ], [9]
ch3 = [0], [48]
程序說明:轉義符'/n'是換行符,第一個printf函數中%c處會替換為'/n',輸出到終端上則會替換為換行,我們可以看到輸出的第一個方括弧中間 發生換行。%d是c1的ASCII碼值代替。轉義符'/t'是水平製表符,第二個printf里的%c會替代為'/t',輸出到終端上。數值48對應的 ASCII碼是0,所以對應輸出到終端上是一個0。
6.浮點型數據類型
C語言定義了三種浮點數據類型:
•float,單精度
•double,雙精度
•long double,長雙精度
C標准中對不同類型的浮點數有不同的規定,編譯器不同或硬體條件不同,位元組長度也不相同。
例 測試三種浮點型位元組長度
#include
int main(void) {
printf("sizeof(float) = %d/n", sizeof(float));
printf("sizeof(double) = %d/n", sizeof(double));
printf("sizeof(long double) = %d/n", sizeof(long double));
return 0;
}
編譯和運行結果
[root@localhost ccc]# gcc c19.c
[root@localhost ccc]# ./a.out
sizeof(float) = 4
sizeof(double) = 8
sizeof(long double) = 12
浮點型的位元組長度、精度、數量級范圍和輸出輸入格式表
序號 數據類型 位元組長度 精度 數量級范圍 printf和scanf格式
1 float(f) 4 7 -38~38 %f
2 double 8 約16 -308~308 %f
3 long double(1) 12 約19 -4932~4932 %llf
7.浮點型精度
浮點型精度從低到高排列為float、double和long long double。
例 檢查浮點型精度
#include
int main(void) {
float f = 0.9876543210123456789012f; /* 可以不使用f後綴,但可能會出現warning */
double d = 0.9876543210123456789012;
long double ld = 0.9876543210123456789012l; /* 必須使用後綴l或L */
printf("f/t= %.25f/n", f);
printf("d/t= %.25lf/n", d);
printf("ld/t= %.25llf/n", ld);
return 0;
}
編譯和運行結果
[root@localhost ccc]# gcc c20.c
[root@localhost ccc]# ./a.out
f = 0.9876543283462524414062500
d = 0.9876543210123456262294894
ld = 0.9876543210123456789217150
8.浮點型的存儲方式
浮點型數值以科學計數法的表示形式存儲在內存中。浮點型的內存形式包含三個部分:
1)符號位
符號位浮點型的符號位只有一位,為最高位。該位為1,表示負數,該位為0,為非負數。
2)指數位
浮點型的指數位以補碼形式存儲,是科學計數法的指數部分。
3)基數位
基數位是浮點型的最後一位,這個位決定數值的精度。
浮點型儲存分段表
序號 數據類型 符號位 指數位 基數位 偏差值
1 float 1 8 23 127
2 double 1 11 52 1023
3 long double 1 15 64 16383
例 檢測float、double和long double的存儲狀態
#include
int main(void) {
float fone = 2.0;
float ftwo = 2.5;
double done = 2.0;
double dtwo = 2.5;
long double ldone = 2.0;
long double ldtwo = 2.5;
/* 輸出float型數據在內存中的存儲內容 */
printf("float (2.0) = %08x/n", *(int *)(&fone));
printf("float (2.5) = %08x/n", *(int *)(&ftwo));
/* 輸出double型數據在內存中的存儲內容 */
printf("double(2.0) = %016llx/n", *(long long *)(&done));
printf("double(2.5) = %016llx/n", *(long long *)(&dtwo));
/* 輸出long double型數據在內存中的存儲內容 */
printf("londou(2.0) = %08x %08x %08x/n",
*(((int *)(&ldone)) + 2 ),
*(((int *)(&ldone)) + 1 ),
*(((int *)(&ldone)) ));
printf("londou(2.5) = %08x %08x %08x/n",
*(((int *)(&ldtwo)) + 2 ),
*(((int *)(&ldtwo)) + 1 ),
*(((int *)(&ldtwo)) ));
return 0;
}
編譯和運行結果
[root@localhost ccc]# gcc c21.c
[root@localhost ccc]# ./a.out
float (2.0) = 40000000
float (2.5) = 40200000
double(2.0) = 4000000000000000
double(2.5) = 4004000000000000
londou(2.0) = 00004000 80000000 00000000
londou(2.5) = 00004000 a0000000 00000000
D. 關於浮點型的數據,在不同計算機語言中的取值范圍是不是不一樣
Java和C的浮點數都遵循IEEE 754標准,唯一的不同是Java允許非規格化數,即在階碼為全0時允許尾數不以1開頭,如此一來Java可以表示的最小數是2^(-(126+23))=2^-149=1.4e-45,而C語言不允許非規格化數,因此最小可以表示的數是2^(-126)=1.18e-38。
E. 浮點數運算,因編譯器精度不同導致的誤差如何避免
將小數部分放大10倍
F. 不同編譯器會不會產生不同的結果
會有不同的結果。因為編譯器不同自帶的庫函數也不一樣。