劇多
首頁
資訊
體育
娛樂
汽車
投資
財經
軍事
科技
數碼
科學
遊戲
歷史
健康
政治
影視
旅遊
育兒
美食
時尚
房產
農業
社會
文化
教育
技術
美文
情感
故事
家居
職場
自然
闢謠
心理
攝影
漫畫
生活
其它
Club
Tips
熱門話題
搜尋
註冊
登入
首頁
>
Club
>
2021-02-09 05:47
integral是什麼意思?
9
回覆列表
1 # 使用者6818057080839
C++的轉換規則遠比你想象的噁心得多。不同型別間賦值和二元運算時都可能涉及integral promotions[4.5],integral conversions[4.7]舉個例子:
輸出將會是這裡發生的事情是這樣的——標準規定比較兩個數前,比int小的型別先通通promote成int。那麼前兩個中unsigned char的-1和unsigned short的-1都會被promote成int。promote的過程很有意思,編譯器看到你說-1是char,那他就認為這個-1在promote前是0xFF,又看到你說這個char是unsigned的,那麼他promote成int時就直接在前面填零,即0x000000FF。(如果你要說它是個signed char的-1,它會給你promote成0xFFFFFFFF)接下來就看這一個,現在右邊已經和左邊在位元層面都是32位了,要進行比較的時候問題又來了當左邊的負數和右邊的unsigned作比較時,到底轉換誰?標準規定此時將負數轉成unsigned,也就是左邊的int型-1被當成unsigned對待,值就是,那麼和右邊0x000000FF的值255比較,當然兩者不相等。short的那個同理。最後兩個,即int的-1和long的-1,由於沒有從小整型到大整型promotion的這一步,所以比較結果就為true。上面說的這些東西大可以什麼都不知道,只要平時不要作死在signed和unsigned之間賦值或者進行比較。另外想說的是不要在C++中用C cast了,也即所謂的強制型別轉換,而應該用C++的const_cast, static_cast和reinterpret_cast。因為C casts在C++中是會被替換成這三種cast的組合的,而你不知道什麼時候就會被reinterpret_cast了,reinterpret_cast對於沒有經驗的人是很危險的,所以說,用C的強制型別轉換會產生無法預料的結果。
發表回復
∧
中秋節和大豐收的關聯?
∨
錯誤的時間遇到了對的人和對的時間遇到了錯誤的人,哪個更不幸?
熱門排行
穿越火線挑戰擊中特效怎麼獲得?
萬國覺醒伯利克天賦點怎麼弄?
烏倫古湖風景區收門票嗎?
dht變速箱哪個牌子好?
屏幕爽滑液怎麼用?
不允許字距調整是什麼意思?
西裝後面開叉怎麼縫合?
保持童心又優雅到骨子裡文案?
自行車前叉怎麼改可鎖死?
貓咪吃了罐罐後不吃貓糧咋辦?
C++的轉換規則遠比你想象的噁心得多。不同型別間賦值和二元運算時都可能涉及integral promotions[4.5],integral conversions[4.7]舉個例子:
輸出將會是這裡發生的事情是這樣的——標準規定比較兩個數前,比int小的型別先通通promote成int。那麼前兩個中unsigned char的-1和unsigned short的-1都會被promote成int。promote的過程很有意思,編譯器看到你說-1是char,那他就認為這個-1在promote前是0xFF,又看到你說這個char是unsigned的,那麼他promote成int時就直接在前面填零,即0x000000FF。(如果你要說它是個signed char的-1,它會給你promote成0xFFFFFFFF)接下來就看這一個,現在右邊已經和左邊在位元層面都是32位了,要進行比較的時候問題又來了當左邊的負數和右邊的unsigned作比較時,到底轉換誰?標準規定此時將負數轉成unsigned,也就是左邊的int型-1被當成unsigned對待,值就是,那麼和右邊0x000000FF的值255比較,當然兩者不相等。short的那個同理。最後兩個,即int的-1和long的-1,由於沒有從小整型到大整型promotion的這一步,所以比較結果就為true。上面說的這些東西大可以什麼都不知道,只要平時不要作死在signed和unsigned之間賦值或者進行比較。另外想說的是不要在C++中用C cast了,也即所謂的強制型別轉換,而應該用C++的const_cast, static_cast和reinterpret_cast。因為C casts在C++中是會被替換成這三種cast的組合的,而你不知道什麼時候就會被reinterpret_cast了,reinterpret_cast對於沒有經驗的人是很危險的,所以說,用C的強制型別轉換會產生無法預料的結果。