❶ C語言實型與整型轉換問題(很急啊)
選B
x = y * 100 +0.5
運算結果自動類型轉換為int.
自動類型轉換時,把小數部分忽略了.
所以x保留了y的兩位小數.
y = x / 100.0
x自動類型轉換為float.
❷ C語言 怎麼判斷數是實性還是整型
double可以定義16位數字,float比double少
❸ c語言中定義變數為一個整型但是輸入的是一個實型,系統會怎麼處理
自動截斷小數部分,轉換為整型。如輸入2.5,被轉換為2。
❹ 求助高手。C語言數值實型轉整型為什麼變了
這個不好解釋。首先你得了解c語言中小數的存儲方式
很明顯可以看到,他並不是67,之所以輸出67是因為四捨五入了。所以轉成int成了66
❺ 在C語言中實型怎麼轉化成整形
一、問題分析:你來的源問題中「實型轉化為整型」其實就是強制類型轉換;
二、概念說明:強制類型轉換是通過類型轉換運算來實現的。其一般形式為: (類型說明符) (表達式) 其功能是把表達式的運算結果強制轉換成類型說明符所表示的類型;
三、應用舉例:
main()
{
floata;
a=3.1415926;
(int)a;//轉換後a=3,而不是3.1415926
}
原本的單精度實型變數a=3.1415926,經過(int)a語句強制轉換為int整形變數後,a=3。
❻ C語言中為何整型變數以實型變數輸出為0
1、整形數和浮點數在內存中的存儲格式和布局不同(理解浮點數的內存布局和表示方式,請參考:http://blog.csdn.net/songjinshi/article/details/7753777)
2、printf在進行參數入棧時是根據實參的類型進行入棧,而不是根據格式化字元中指定的類型,具體入棧過程如以下所示。所以造成入棧實參的類型和實際函數使用的類型不匹配(關鍵是所佔內存的大小不同),所以在具體的解析中就會出現如題所說的結果,因為整形的內存布局在被解析為浮點數時會非常小,因為整形本來是4個位元組存儲,而被解析為8個位元組的浮點數,所以所得的值會非常小,正如浮點數的的表示:非規格化:當E的二進制位全部為0時,N為非規格化形式。
注意,此時小數點左側的隱含位為0。 為什麼e會等於(1-bias)而不是(-bias),這主要是為規格化數值、非規格化數值之間的平滑過渡設計的。後文我們還會繼續討論。
有了非規格化形式,我們就可以表示0了。把符號位S值1,其餘所有位均置0後,我們得到了 -0.0; 同理,把所有位均置0,則得到 +0.0。非規格化數還有其他用途,比如表示非常接近0的小數,而且這些小數均勻地接近0,稱為「逐漸下溢(graally underflow)」屬性。
下面貼出兩段反匯編代碼,解析參數如何入棧:
printf("%f",45);
00405028 mov esi,esp
0040502A push 2Dh
0040502C push offset _ORDER_SERVER_ADDRESS-0ACh (43F2ACh)
00405031 call dword ptr [__imp__printf (43C124h)]
00405037 add esp,8
printf("%f",d);(d為整形變數)
00405028 mov esi,esp
0040502A mov ecx,dword ptr [d]
0040502D push ecx
0040502E push offset _ORDER_SERVER_ADDRESS-0ACh (43F2ACh)
00405033 call dword ptr [__imp__printf (43C124h)]
00405039 add esp,8
0040503C cmp esi,esp
0040503E call _RTC_CheckEsp (439760h)
double a=5,c;
float b;
int d=0x40a00000,y=6;
int *p;
char s=5;
p=&d;
b=(float)a;
printf("%f,%f,%f,%f,%f,%f,%d",b,c,(float)d,s,(float)s,y,y);
00405028 mov esi,esp
0040502A mov ecx,dword ptr [y]
0040502D push ecx
0040502E mov edx,dword ptr [y]
00405031 push edx
00405032 movsx eax,byte ptr [s]
00405036 mov dword ptr [ebp-34h],eax
00405039 fild dword ptr [ebp-34h]
0040503C sub esp,8
0040503F fstp qword ptr [esp]
00405042 movsx ecx,byte ptr [s]
00405046 push ecx
00405047 fild dword ptr [d]
0040504A sub esp,8
0040504D fstp qword ptr [esp]
00405050 sub esp,8
00405053 fld qword ptr [c]
00405056 fstp qword ptr [esp]
00405059 fld dword ptr [b]
0040505C sub esp,8
0040505F fstp qword ptr [esp]
00405062 push offset _ORDER_SERVER_ADDRESS-0C4h (43F2ACh)
00405067 call dword ptr [__imp__printf (43C124h)]
0040506D add esp,30h
00405070 cmp esi,esp
00405072 call _RTC_CheckEsp (439780h)
❼ [C語言]怎樣把整型轉變為字元型
使用itoa函數。
原型:extern char *itoa(int i);
參考代碼:
#include<stdio.h>
#include<stdlib.h>
intmain()
{
inta=125;
charb[50];
printf("%s ",itoa(a,b,10));//把10進制的125轉成字元並輸出。
return0;
}
/*
擴展專資料:
注意事項
itoa() 函數屬有3個參數:第一個參數是要轉換的數字,第二個參數是要寫入轉換結果的目標字元串,第三個參數是轉移數字時所用的基數(進制)。在上例中,轉換基數為10,就意味著以10為轉換進制。10:十進制;2:二進制。
itoa 並不是一個標準的C函數,它是Windows特有的,如果要寫跨平台的程序,請用sprintf。
標准庫中有sprintf,功能比這個更強,用法跟printf類似:
❽ C語言整型字元型實型怎樣區分。
整型用來存整數,字元型存字元,實型存小數。
❾ c語言中如何把整型變成長整型
短整型還用表示??默認的!!你隨便定義的常量,變數就是短整型,要是想要精確值高的話,就定義成長整形行了!!
❿ C語言如何實現整形轉換成字元型然後賦值到字元數組
a=12345678 為int型,在內存中佔4位元組,共32位,即為 00000000 10111100 01100001 01001110
將a右移24位即取出前8位,第一個位元組;內
將a右移16位,然後位與容00000000 11111111 即0xff,即可取出第二個位元組;
將a右移8位,然後位與00000000 00000000 11111111 即0xff,即可取出第三個位元組;
將a位與00000000 00000000 00000000 11111111 即0xff,即可取出第四個位元組。
#include <stdio.h>
int main(void)
{
int a = 120;
char b[4];
b[0] = a >> 24;
b[1] = ((a >> 16) & 0xff);
b[2] = ((a >> 8) & 0xff);
b[3] = a & 0xff;
return 0;
}