1樓:匿名使用者
這是預設的型別提升引起的問題。
第一個例子裡的表示式u+i裡,long long的型別比unsigned 的型別大,所以這裡u會被轉換成long long,u+i的結果就如輸出
第二個例子的表示式裡u+i裡,u的型別比int大,所以i=-42會轉換成unsigned。-42轉換成無符號就是一個很大的值(4294967254),u+i就是輸出結果了。
以下是預設型別提升的規則
同一句語句或表示式如果使用了多種型別的變數和常量(型別混用),c 會自動把它們轉換成同一種型別。以下是自動型別轉換的基本規則:
1. 在表示式中,char 和 short 型別的值,無論有符號還是無符號,都會自動轉換成 int 或者 unsigned int(如果 short 的大小和 int 一樣,unsigned short 的表示範圍就大於 int,在這種情況下,unsigned short 被轉換成 unsigned int)。因為它們被轉換成表示範圍更大的型別,故而把這種轉換稱為「升級(promotion)」。
2. 按照從高到低的順序給各種資料型別分等級,依次為:long double, double, float, unsigned long long, long long, unsigned long, long, unsigned int 和 int。
這裡有一個小小的例外,如果 long 和 int 大小相同,則 unsigned int 的等級應位於 long 之上。char 和 short 並沒有出現於這個等級列表,是因為它們應該已經被升級成了 int 或者 unsigned int。
3. 在任何涉及兩種資料型別的操作中,它們之間等級較低的型別會被轉換成等級較高的型別。
4. 在賦值語句中,= 右邊的值在賦予 = 左邊的變數之前,首先要將右邊的值的資料型別轉換成左邊變數的型別。也就是說,左邊變數是什麼資料型別,右邊的值就要轉換成什麼資料型別的值。
這個過程可 能導致右邊的值的型別升級,也可能導致其型別降級(demotion)。所謂「降級」,是指等級較高的型別被轉換成等級較低的型別。
2樓:匿名使用者
這個涉及數值型別的隱式轉換問題,參考下圖,希望能夠解決你的問題
3樓:宿命的輪迴
原因是: 第一題中, 輸出時, u+i 的結果會隱式的轉換為 long long 型別, 所以結果正確
第二題中, 輸出時, 會隱式轉換為 unsigned int 型別, 由於結果為負數, 最高位為1, 那麼變為無符號數的時候結果就變得非常大了。。。
4樓:天涯之仗劍行走
unsigned是一個無符號的,這裡沒有寫什麼資料型別,預設為int; unsingned int的是8個byte,int佔有的位元組是4byte,編譯器計算不出不同位元組相加的情況從而得出他們相加是一個亂碼;而long long 是8個byte,正好跟unsigned int的範圍是一樣,故能得出正確答案;望採納!
c++中使用long long型別的時侯執行結果為什麼和用int時的執行結果不一樣呢?
5樓:
(1)這同編譯器有關,int 不是標準 c/c++ 型別宣告形式。int 有的編譯器處理成 short int, 有的編譯器處理成long int.
long long 應當是 64bits, 但有的編譯器處理成 long int.
vc++ 6.0 用 _int64 宣告 long long。
(2)這同數值範圍有關。如果數值大,int 放不下,數值溢位,高位丟失,正變負。
6樓:匿名使用者
可能就是你用int存不下 產生溢位了吧
用long long就出現正確結果了
7樓:杜茂彥
long long 64bit與int 不一樣,執行結果在某些時候不一樣有什麼不正常麼?
在c++中int和long有什麼區別,自動型別轉化為什麼從int轉換成long
8樓:匿名使用者
都是整bai數型別,以前老的編譯器duint 16位 long 32位,現在zhi好多編譯器int 和long一樣。
dao自動轉內
換是內建規則,容即隱式轉換,因為int 轉long不會丟失資料,但如果long轉成int,有些編譯器可能位寬不一樣,會丟失資料。
c 中INT和INT返回有什麼區別具體點啊
c語言系列都是 case sensitive 區分大小寫 的,不知道你到底是問int還是int 一,如果你問的是int int是宣告整形變數的keyword int 是別名,一般用在函式的 list of parameter 中,表示對int型變數的引用,如 還有下面的情況 int a 15 int...
求問個c語言問題如圖此程式其中256是什麼
快過年了,不想幹活了,幫樓主答疑吧。這個題目設計3個問題 1 資料大小 char在記憶體中佔一個位元組,取值範圍為 0 255 之間。short在記憶體中佔二個位元組,取值範圍為 0 65535 之間。樓主可以認為就是上圖中的一個單元格。注 這裡不討論char和byte這種有符號無符號問題,怕樓主更...
C 程式編輯求1,1,2,3,5,8,13求前20項和,感激不盡
id優雅的人 題目 有一分數序列 2 1,3 2,5 3,8 5,13 8,21 13.求出這個數列的前20項之和。1.程式分析 請抓住分子與分母的變化規律。2.程式源 main int n,t,number 20 float a 2,b 1,s 0 for n 1 n enjoy冰心玉壺 下面的程...