国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

c++ unsigned和int類型轉換及運算

2019-11-10 21:26:23
字體:
來源:轉載
供稿:網友

一、規則總結

1. 在c++中,如果賦值給無符號類型一個超過它表示范圍的值(如負數),結果是初始值對無符號類型表示數值最大值取模后的余數。

2. 在c++中,如果表達式中同時有無符號類型和有符號類型,會默認將有符號類型轉換為無符號類型進行運算,運算結果也是無符號類型。

二、以int和unsigned為例

1. 如果賦值給unsigned一個負數值,結果是什么?結果是將該負數對unsigned表示數最大值取模后的余數。

(1)unsigned表示數最大值

在大部分編譯器中該類型占4個字節,則最大值是2的32次方,為4294967296。

(2)負數的取模運算

負數的取模運算和數學中的取余運算不同,區別主要體現在:取模運算是向負的無窮大取值,而取余運算是向0取值。舉例說明:如-3對2取余結果為-1,但-3對2取模結果則是-2。

(3)賦值給unsigned一個負數值時實際得到的結果

                         

上述程序的輸出結果是:

結果是怎么算出來的呢?

u=-1,-1對4294967296取模,結果還是-1,而取模后的余數是4294967296-(-1*-1)=4294967295

u=-20,-20對4294967296取模,結果是-20,取模后的余數是4294967296-20=4294967276

u=-4294967296(這是unsigned能表示的負數的極限),結果是-1(除不盡的需要向負無窮取值,能除盡就不用了),取模后的余數是4294967296-4294967296=0

2. 如果表達式中同時有unsigned和int,計算結果是什么?結果是將int轉換為unsigned后再計算,結果也按照unsigned來轉換

上述程序的輸出結果為:

結果是怎么算出來的呢?

u1-u2=10-42=-32,u1和u2都是unsigned,結果也應是unsigned,-32超過了unsigned的表示范圍,需要轉換。按照上一小節中的轉換方式,轉換結果為4294967264

i1-u1=11-10=1,結果為unsigned的1。

u1-i1=10-11=-1,u1是無符號數,i1首先轉換為無符號數為11,計算結果為-1,超出了unsigned范圍,轉換后為4294967295。

i=-1,轉換為unsigned后4294967295,所以i-u=4294967295-10=4294967285

三、結論

切勿混用帶符號類型和無符號類型?。?!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 固阳县| 顺昌县| 新绛县| 楚雄市| 仪征市| 晋中市| 绵阳市| 剑阁县| 神农架林区| 治县。| 丹东市| 敖汉旗| 确山县| 建湖县| 崇文区| 吴川市| 米泉市| 阜新市| 镇江市| 青浦区| 嘉荫县| 赫章县| 宝兴县| 名山县| 丹阳市| 红河县| 舒兰市| 云阳县| 小金县| 饶河县| 惠水县| 临沭县| 施秉县| 静乐县| 长葛市| 荔波县| 京山县| 郓城县| 新乡市| 茌平县| 阿合奇县|