C語言不同資料型別計算時轉換問題?

時間 2021-06-05 15:22:08

1樓:薛非

1. m = a + b 的計算過程中,是將a和b分別轉換為int型,還是將a+b的結果轉換為int型?

作為右值,所有短於int型別的資料都會被隱式地轉換為int或unsigned

所以m=a+b

本質上表達的是

m = (int)a+(int)b

這叫整數提公升(integer promotions)

2. a+b的結果存放到記憶體的什麼位置?為什麼沒有溢位而得到144(200+200-256)?是因為%d格式輸出讀取了4個位元組嗎?a+b的結果實際應該是多少?

a+b的結果存放到記憶體的什麼位置與程式設計師無關。

根據整數提公升原則

printf("a+b = %d\n",(a+b));

的含義其實是

printf("a+b = %d\n",((int)a+(int)b));

當然沒有溢位。

a+b沒有別的結果,這個表示式就是 (int)a+(int)b。3. a和b都只佔1位元組,為什麼(a+b)佔4位元組?

sizeof運算的含義是求與其運算物件對應的資料型別所佔的位元組數。

a和b都是char型別,當然sizeof a和sizeof b都是1位元組;

而a+b的型別則是int型別。

2樓:

回去好好看書吧,另外學習能力很重要。。。

a和b的型別是char,(a+b)的型別是int,所以你問我為什麼int佔4個位元組,char佔乙個位元組?

我還是再修改一下吧,char本質上是占用1byte的int型別,而int是占用4byte,1byte也就是說是8bit,所以它的大小就是=256,400很明顯是大於256了,所以會得到144。關於為什麼兩個char相加得到int,看上面薛非的答案。

作為學生,還是要學會如何分解問題,把問題分解成小的問題再通過自己查詢解決,stackoverflow上有很詳細關於你上面所提到的問題,要學會自己去解決。

在c語言中如何防止輸入錯誤的資料型別

站起來 這問題,一看就是初學C語言,進入了迷茫期,前方霧濛濛,看不到該往哪走。指個路吧 scanf僅供學習程式設計之用,實際工程中用不到,別在這浪費時間了。實際工程中我們都寫圖形介面,用不著scanf摻和。 方法一 利用 scanf 的返回值,來判斷是否有錯誤輸入 如果錯誤,則用 scanf s 來...

弱型別語言中資料型別存在的意義?

小烏龜 強型別弱型別,靜態型別動態型別,這些只是概括性的分類而已。php型別不是很強,很多隱含的自動轉換,但是型別資訊確實是存在的,既然存在,有時候就可以加以利用,這是很正常的。 eechen 弱型別語言裡的型別判斷肯定有意義呀.比如不同型別的資料比較,很多時候不僅要比較值是否相等,還要比較型別是否...

如何判斷mysql欄位做了計算後資料型別?

沈亮 1建立表並定義資料 CREATE TABLE test int id int,sales count int,預設是SIGNED 範圍 2147483648,2147483647 UNSIGNED 範圍0,4294967295,virtual count mediumint 2 插入資料驗證 ...