c 資料型別轉換問題

時間 2021-09-02 01:36:10

1樓:匿名使用者

首先,先理清所有變數的資料型別。

變數 m 與 n 是 int 型別,變數 a,b,x 是 float 型別。

然後,運算表示式:x = m/2 + n*a/b + 1/2

根據運算優先順序,先整除後加減,這時候可以把這個運算表示式看作三個部分

第一部分: m / 2,m 是 int 型別,2 也是 int 型別,所以 m / 2 的結果也會是 int 型別,int 型別會截斷小數部分,也就說 m / 2 = 3.5,由於 int 型別的緣故,截斷小數部分,結果是 3。

第二部分:n * a / b,n 是 int 型別,a 與 b 是 float 型別,float 型別會保留小數部分,當 int 型別與 float 型別運算時候,c++將進行自動轉換,結果為 24.000000。

第三部分, 1 / 2,與第一部分一樣,int 型別運算,結果為 0。

最後運算表示是 3 + 24.000000 + 0,整數與浮點數運算,結果為27.000000,然後將這個結果賦給變數 x,而 x 是 float 型別,所以最後輸出結果為27.

000000。

2樓:

m是int型 m/2返回整型3 而不是3.5 最後結果轉換float

3樓:匿名使用者

float 在和int 用算時自動轉換為int ,而你的x有是float 所以結果又將float 轉換為int

4樓:誰讓我揩油

m/2=0

1/2=0

c++中的int和char之間的轉換問題

5樓:

這要用到ascii碼的知識,粗略講一下

字元'0'的ascii碼為

48,然後是'1' '2' '3' ... '9'

字元' '(空格)的ascii碼為32.

字元'a'的ascii碼為65,然後是'b' 'c' ... 'z'

字元'a'的ascii碼為97,然後是'b' 'c' ... 'z'

所以,把一個數字字元ch,轉為一個整數,就是ch-'0'當然ch-48也行

因為c和c++中,字元和整型是一樣的,可以隱式轉換

6樓:匿名使用者

int型和char型的長度不一樣。int佔4個位元組而char只佔一個位元組(大小視系統而定的),所以char轉int沒問題,反過來就可能出錯了

字母有對應的的ascii碼,所以a = b - '0'就是通過ascii碼轉換為數字的

int型也可以直接賦值給char型,同樣是按照ascii碼來的,但由於int長度比char長,因此超過範圍則轉換出來的值可能是不定的(根據編譯器不同而不同),所以一般最好不要這麼轉換

7樓:匿名使用者

目前絕大多數編譯器,int 型資料佔 4 位元組, char 型佔 1 位元組。進行不同資料的強制轉換其實就是資料佔用位元組擴充或者截斷。

比如int a;

char b;

a=(int)b;

b=(char)a;

由 b 轉換成 int 型資料就是將 b 擴充 3 個位元組;而將 a 轉換成 char 型資料就是將 a 的最低位位元組擷取出來。因此,將資料由值域較寬型別強制轉換到值域較窄型別時,有可能出現資料資訊丟失。

你說的轉換錯誤其實不然,因為 char 型資料在機器裡通過 ascii 碼儲存,也就是用一個整數儲存的。譬如字元 ' 0 ',對應的 ascii 碼的十進位制數 是 48,因此強制轉換成 int 後,是 48,而不是 0 。要想將字元 '0' 轉換成整數 '0',就要使用你所說的 a = b - '0'; 或者 a = b - 48; 。

8樓:牽牛散步

第一,int型和char型的長度不一樣。int佔4個位元組而char只佔一個位元組。

第二,char型可以直接賦值給int型,值的大小是char字元對應的ascii碼值,例如: b = 'a'; a = b; 則a的值應該是97。

第三,int型也可以直接賦值給char型,同樣是按照ascii碼來的,但由於int長度比char長,因此只有在int的值處在ascii碼範圍內的時候轉換後的值才是有意義的,如果超過範圍則轉換出來的值可能是不定的(根據編譯器不同而不同),在vc6下是0

9樓:

首先你要清楚,在c++中int型佔4個位元組,而char型別

只佔1個位元組,char型別是可以轉化為int型別的,但int型別不一定可以轉換為char型別。

我對你這個問題的理解是,你想將0到9之間的數字轉化為char型別的,或是將'0'-'9'之間的字元轉化為int型的數字。

你如果要用強制轉換的話可以這樣:(0的ascii碼是48)

int a;

char b;

a=(int)(b-48);或b=(char)(a+48);

//這樣轉化的前提是a的範圍是0-9,b的範圍是'0'-'9'

在實際運用中,在整型和字元型之間轉化用得較多的應該要算int型與char *型別之間的轉化了。這個時候可以用atoi(字元型轉整型,可以分開理解a to i)和itoa(整型轉字元型,i to a),如:

int a=11111

char* b="33333";

a=atoi(b);//將整型轉化為字串

或itoa(a,b,10);//將字串轉化為整型,最後一個引數是進位制,在這裡是10進位制

10樓:匿名使用者

a=b-'0' 得到的數字是 0和b 兩個字母的機器**的差別, 不是數學意義上的數字.

另外int是兩個byte, char是一個. 也無法直接轉換.

想轉換字母和數字的話你可以試試系統程式 ctoi() 和 itoc()

11樓:徐良軍

在c++中,int轉換為char稱為隱式轉換,char轉換為int稱為顯式轉換。隱式轉換可直接轉換,顯示轉換則要強制性轉換,故b=a,可直接賦值,強制性轉換則要指明轉換型別,如:a=(int)b;

12樓:匿名使用者

轉換其實是對應的ascii碼來顯示的。比如char c=『a』; int i= c;

那麼i=65;是a對應的ascii碼。又比如 c = char(65);那麼c就是a;

13樓:踏岸尋柳

直接賦值即可,無須轉換。

請問所有的C資料型別轉換方法

老兄,你都已經說了萬能的轉換方法了 是騎在驢子上找驢吧。convert後面 可以點出很多東西。toint32 轉換成32位的整數.toint16 轉換成16位的整數.toboolean 轉換成 bool 值.tostring 轉換成 字串.todouble 轉換成小數.後面都有提示的,在c 裡面 c...

C 資料型別

看你的問題,覺得你需要的應該是這些欄位在資料庫中的資料型別吧?帳號 varchar 20 20個字元內的可變長字串,當然,長度你可以自己改合適的值。密碼 varchar 30 角色名 nvarchar 20 20個字元內的可變長字串,因為可能包含中文,所以用雙位元組儲存較好。學生編號 int 或 v...

C語言中賦值時不同資料型別的轉換

你說的int應該是16位,2位元組。char型別只佔用了一個位元組,8位。所以轉化的時候只要取int型16位的低8位就夠了。這個和變數的記憶體儲存方式有關係,你要弄懂變數怎麼在記憶體中放置和儲存的就很容易理解了。 是int 轉為char 才取 int 的低8位 int 有 32位 轉成char型別時...