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 注意在變數說明中給變數賦初值...