-
#include
int main(void)
double d;
printf("enter a single digit: ");
scanf("%lf", &d);
printf("the digit entered is %i", (signed int)d);
return 0;
如果將強制轉換新增到輸出中,則輸出將是正確的結果,這可能是因為原始資料型別是雙精度浮點,但它的格式為 %i(有符號整數),並且結果在轉換過程中是不可預測的。
說白了,上面的圖片很好。
在圖中,你是用 gdb 來除錯你的**,當輸入是 4 時,我們用這個浮點數 6 的儲存方式看堆疊(x 8bf 後面跟著 address 是記憶體位址的值,以位元組表示,顯示 8 個位元組),double 型別占用了 8 個位元組,可以看到這 8 個位元組中的前 6 個是 0, 那麼就容易理解了,當你按照%i(有符號整數)格式化時,不管是有符號還是無符號間數,都會按照表示式中的int型別進行處理(自動型別公升級),也就是在一般int型別為32的機器上,8位元組的雙精度數會被截斷,取前4個位元組。
不是很清楚嗎? 房東可以再做乙個實驗,你輸入乙個浮點數來檢視(例如,結果會顯示多少? 絕對不是 0
這是乙個非常大的數字,因為浮點數的前4位不是0,而且非常大,關於記憶體中雙精度浮點數的具體儲存方法,以及prinf函式的內部機制,房東可以注意一下。
-
i 是什麼意思?
你想要什麼樣的輸出格式?
如果要輸出浮點型別,請使用 %lf A,使用 %d 進行整形,並使用 %g 表示浮點數小數點後的額外 0
我還沒見過!
-
我是什麼? 沒聽說過。
-
double 是 C 語言中的乙個關鍵字,它表示雙精度浮點型,占用 8 個位元組的記憶體空間,取值範圍為“,完全保證雙精度的有效位為15位,16位只是值的一部分***。
在 C 中,float 和 double 都是浮點數。
不同的是,double 表示的範圍大於 float 的範圍,小數部分的範圍也高於 float。
舉個例子:圓周率。
這個數字如果用浮點數表示,最多只能精確到小數點後 6 位。 雙精度可以精確到小數點後 15 位左右。 確切地使用了多少位數字,具體取決於所使用的編譯器。
是的,但是每台機器的編譯器之間沒有太大區別。
至於整數部分,浮點數所代表的整數部分的範圍已經足夠大了,可以表示到萬億級,已經是無邊無際了。 double 表示的整數範圍甚至更大。 在實際開發中,除了少數高精度領域外,基本上判斷浮子的使用就足夠了。
-
它表示整數資料型別,通常為 4 個位元組長。
-
double 型別在記憶體中占用 8 個位元組,int 型別在記憶體中占用 4 個位元組。 double 的值大於 int。 可以理解為雙水壺是8公升水壺,int型是4公升水壺,大水壺中的水不能直接倒入小水壺中。
如果要成功分配值,則需要將 int 型別轉換為 double 型別。
強制型別轉換:將值範圍較大的資料型別轉換為值範圍較小的資料型別,自動執行,而強制則需要手動執行。
轉換格式:資料型別變數名稱 = 資料型別)要轉換的資料值。
賦值給int型別,修改為int i = int);double 型別轉換為 int 型別,並直接去掉小數點。
強烈注意:將浮點數轉換為整數並直接刪除小數點將導致精度損失。
int 被強制轉換為 short 並砍掉兩個位元組,這可能會導致資料丟失。
-
Double 是計算機使用的一種資料。 與單精度浮點數相比,雙精度使用 64 位(8 位元組)來儲存浮點數。
它可以表示十進位系統中的 15 或 16 位有效數字,負值範圍為 to,正值範圍為 to。
例如,宣告乙個型別為 double 的變數:
double num;
初始化 double 型別的變數:
num = ;
-
float 和 double 都是 C++ 中的浮點資料型別,三者的區別在於:
1.精度不同。
浮點型是單精度浮點數,雙精度型是雙精度浮點數。
2. 分配儲存空間。
C++ 編譯器為浮點型別分配 4 個位元組,為雙型別分配 8 個位元組。
3.有效位數不同。
float 可以提供 6 個有效數字,double 可以提供 15 個有效數字。
-
double 的定義是浮點數。
雙精度資料比浮點資料更準確,占用更多空間。 Double 的精度是浮點數的兩倍,因此通常使用更準確的計算。
雙精度浮點值可以轉換為其他型別的整數或浮點數,反之亦然。 雙精度浮點常量的最後乙個字元可以用“d”或“d”標記。 儲存格式類似於浮點,最高位為符號位,接下來的 11 位是指數位,接下來的 52 位是尾數位。
與數值型相比,它可以提供更高的數值精度,使用浮點數的固定儲存長度,每個雙精度浮點型資料占用 8 個位元組。 與數值資料不同,其小數點位置由輸入的資料值決定,並且只能用於表中的字段。
浮點資料:
1.浮子型。
編譯系統為每個浮點型變數分配 4 個位元組,這些值以歸一化二進位數指數的形式儲存在記憶體單元中。
2.雙型。
為了擴大可以表示的值範圍,儲存了 8 個位元組的雙精度型別資料,可以獲得 15 位有效位。
3.長雙型。
不同的編譯系統以不同的方式處理長雙精度型別,Visual C++ 以與雙精度型別相同的方式處理長雙精度型別,分配 8 個位元組。
範圍。 你靜態字元 *chh;
static char *ch1;雖然兩個指標指向的位址沒有變化,但你有沒有想過它們指向的記憶體位址是否已經釋放,char chc[10]; 它是本地的,函式已經結束,生命週期已經結束,你正在嘗試使用 void times() 中的指標訪問它。 >>>More
哈哈,如果你只是在學習SQL程式設計,你都可以接受其中任何乙個,但我推薦Oracle,因為它更接近SQL的常見用法和本質。 再說一句:什麼重量不是重量,不可能直接學習重量級? >>>More