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

時間 2021-05-07 20:01:40

1樓:

你說的int應該是16位,2位元組。

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

2樓:匿名使用者

是int 轉為char 才取 int 的低8位

int 有 32位

轉成char型別時,就只取其最低的8位

3樓:

低八位應該是先轉換成二進位制, 再取其後8位。。。

c語言中 賦值運算中,賦值號兩邊的資料型別不同時

4樓:紫翼魔狼

1、賦值運算中如果賦值號「=」兩邊的資料型別不同,賦值號右邊的型別轉換為左邊的型別,這種轉換是截斷型的轉換,不會四捨五入。 比如i是整型變數,則i=2.99;結果i的值為2

直接捨去

#include

int main()

測試結果為2.

c語言資料型別的自動轉換和強制轉換有什麼區別

5樓:匿名使用者

c語言資料型別轉換分自動轉換和強制轉換兩類。

自動轉換

自動轉換髮生在不同資料型別的量混合運算時,由編譯系統自動完成。自動轉換遵循以下規則:

1.若參與運算量的型別不同,則先轉換成同一型別,然後進行運算。

2.轉換按資料長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉成long型後再進行運算。

3.所有的浮點運算都是以雙精度進行的,即使僅含float單精度量運算的表示式,也要先轉換成double型,再作運算。

4.char型和short型參與運算時,必須先轉換成int型。

5.在賦值運算中,賦值號兩邊量的資料型別不同時, 賦值號右邊量的型別將轉換為左邊量的型別。 如果右邊量的資料型別長度左邊長時,將丟失一部分資料,這樣會降低精度, 丟失的部分按四捨五入向前舍入。

強制型別轉換

強制型別轉換是通過型別轉換運算來實現的。其一般形式為: (型別說明符) (表示式) 其功能是把表示式的運算結果強制轉換成型別說明符所表示的型別。

例如: (float) a 把a轉換為實型(int)(x+y) 把x+y的結果轉換為整型在使用。

強制轉換時應注意以下問題:

1.型別說明符和表示式都必須加括號(單個變數可以不加括號),如把(int)(x+y)寫成(int)x+y則成了把x轉換成int型之後再與y相加了。

2.無論是強制轉換或是自動轉換,都只是為了本次運算的需要而對變數的資料長度進行的臨時性轉換,而不改變資料說明時對該變數定義的型別。

具體如下:

char short->int->usigned->long->double

float->double

6樓:匿名使用者

這個還真是有點忘記了。自動轉換是不是 int i=5/9; 這個算自動轉換麼?或則double i=1.

0;等等 這些都算自動轉換把int a=(int)(1.0); 這個算強制 其他就不知道了。。

7樓:匿名使用者

自動轉化、一般都是小的轉換成大的、 例如、本來是一個int型別、如果int型別和double型別進行計算、那麼、得到的結果就是double型別、而你接收他的值可能是int型別在接受 例如 int a = 10 * 12.55 其中 10 *12.55 的結果會自動轉換為double型別 這個時候你的int型別的 a 用來接收、就會出錯、強制轉換就是、 你把結果強制轉換成 int 型別、但是會損失精度、(去除小數點以後的位數)稱為一個整數 值得注意的是、自動轉換 當中、 小的資料型別轉換成大的資料型別沒有錯、 但是、當大的型別轉換成小的型別的時候、就會出錯、

c語言指向不同資料型別的指標可以直接賦值嗎

8樓:風若遠去何人留

這種是不會出錯的

比如這個**

#include

int main()

會輸出2  2.100000

這個等效於 a=b, float賦值給int,會自動做強制轉換,也就是向下取整。

當如果是 q=p 那就不行了。 不同型別指標不可以直接賦值。

如果一定要賦值 可以q=(int *)p;做顯式的強制轉換。 但是由於int和float的儲存結果不同,得到的值也是錯的。

c語言不同型別之間的賦值問題 15

9樓:

問題是什麼呀,就是怎麼放呀

每個陣列單元才是char ??????能改變的是什麼?

c語言不同型別賦值問題

10樓:匿名使用者

如果都是數字,那就沒必要強轉了,頂多精度會有損失

強轉一般都是用在無法直接轉換的型別之間

11樓:匿名使用者

在c語言中,有的可以自動轉換

有的需要強制轉換

12樓:聖馬家溝

直接就轉化了,無需強制

c語言這幾個賦值有什麼不同。

13樓:水上漂湯

1把int型別的4賦值給float型別的a,這裡牽涉到精度轉換,將低精度的4轉換為float型別,即將4提升為4.000000

2把4.00f賦值給a ,f表示float型別,這是同型別直接賦值

3把4.00賦值給a,4.00是double型別,轉換為float型別會丟失精度

14樓:

float a = 2*2; 是把int型別 數值相成的結果轉為float型別 賦值給a ,這個是短型別向長型別轉換 不會溢位

float a = 2.0f*2.0f; 是 float型別2.0乘以float型別2.0 賦值給a 這個會造成溢位

float a = 2.0*2.0; 是double型別2.0乘以double型別2.0 然後賦值給a 這個是長型別轉短型別 會溢位

c語言中如果兩個資料型別相遇低的忘高的轉換那個高低怎麼分的

15樓:匿名使用者

自動轉換髮生在不同資料型別的量混合運算時,由編譯系統自動完成。自動轉換遵循以下規則:

1.若參與運算量的型別不同,則先轉換成同一型別,然後進行運算。

2.轉換按資料長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉成long型後再進行運算。

3.所有的浮點運算都是以雙精度進行的,即使僅含float單精度量運算的表示式,也要先轉換成double型,再作運算。

4.char型和short型參與運算時,必須先轉換成int型。

5.在賦值運算中,賦值號兩邊量的資料型別不同時, 賦值號右邊量的型別將轉換為左邊量的型別。 如果右邊量的資料型別長度左邊長時,將丟失一部分資料,這樣會降低精度, 丟失的部分按四捨五入向前舍入。

強制型別轉換

強制型別轉換是通過型別轉換運算來實現的。其一般形式為: (型別說明符) (表示式) 其功能是把表示式的運算結果強制轉換成型別說明符所表示的型別。

例如: (float) a 把a轉換為實型(int)(x+y) 把x+y的結果轉換為整型在使用強制轉換時應注意以下問題:

1.型別說明符和表示式都必須加括號(單個變數可以不加括號),如把(int)(x+y)寫成(int)x+y則成了把x轉換成int型之後再與y相加了。

2.無論是強制轉換或是自動轉換,都只是為了本次運算的需要而對變數的資料長度進行的臨時性轉換,而不改變資料說明時對該變數定義的型別。

char short->int->usigned->long->double

float->double

16樓:匿名使用者

只要知道高低順序如下:同一行為同級,char shortintlongunsigned longfloatdoubleunsigned double 但是如果是負數,就不會轉換成unsigned型。

c語言不同型別變數間的運算結果

17樓:董俊錕

double 型

系統有預設的轉化規則,就是從精度底的轉化為精度高的,避免計算時精度的丟失回

具體轉換規則如下答

char --> short --> int ---> unsigned --> long --> unsigned long --> float --> double

C語言賦值語句,C語言中賦值語句有什麼規則要求?

選ab中取模右邊不是整數 c中賦值號左側不是一個變數 d中第二個賦值號左側不是一個變數 吉祥二進位制 c語言中通過 運算子來實現賦值,有時候也用它來進行初始化,在c語言中初始化和賦值是完全兩個不同的概念。比如下面的 int a 10 這是初始化a 0 10 這是賦值 初始化是一個順序點,編譯器保證每...

關於c語言中指標賦值的問題,關於C語言中指標賦值的問題

計算天下 你這樣想說明你還沒有真正理解記憶體和指標。int a 表示編譯器隨機取出一個空閒的地址分配給a,不妨設為00000000,長度為sizeof int 不同編譯器可能不同。int p 也表示隨機取出一個空閒的地址分配給p,不妨設為000000f0,長度一般為4個位元組,則這四個位元組現在儲存...

C語言中賦值語句有什麼規則要求,c語言中規定 賦值運算子的左邊必須是什麼

由於在賦值符 右邊的表示式也可以又是一個賦值表示式,因此,下述形式 變數 變數 表示式 是成立的,從而形成巢狀的情形。其之後的一般形式為 變數 變數 表示式 例如 a b c d e 5 按照賦值運算子的右接合性,因此實際上等效於 e 5 d e c d b c a b 注意在變數說明中給變數賦初值...