日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深入理解signed、unsigned 关键字

發布時間:2025/6/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入理解signed、unsigned 关键字 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

深入理解signed、unsigned 關鍵字





答:

1.-0?和+0?在內存里面分別怎么存儲:

計算機里表示數字用的都是補碼不是原碼。想知道補碼是啥可以去百度一下。零在計算機里就是0,不存在正負一說。0和正數的補碼都等于原碼,也就是平時說的2進制數。負數的補碼是符號位置一的情況下,對原碼求反,再加一得到的。經過這樣的變換,負數和正數運算的時候可以直接做加法,不需要根據符號位決定是做加法還是做減法。減法也可以改變有符號數的符號位,然后直接做加法。這樣CPU就不需要專門做減法的電路了。

十進制數??????????原碼????????????反碼?????????補碼
??+0?????????00000000?????00000000???00000000
??-0?????????10000000?????11111111???00000000


2.就以類似的例子來描述:
unsigned int a = 6;
int b = -20;
i+j=?
解釋:
unsigned int類型的數據與int類型的數據相運算后,自動轉化為unsigned int類型。因此a+b的值不是-14,而是一個unsigned int類型的數4294967382.
1).先說下這個數字怎么來的:
在內存中,負數的存儲方式是正數的反碼+1.
6:0x00000006
20:0x00000014,補碼:0xfffffffeb
-20:0xfffffffec
>>> 0xffffffec+0x06
4294967282L
2).%d,%u輸出結果不一樣?
int 與unsigned存儲形式一樣,都是補碼形式,區別在于輸出的格式控制符,當以%d輸出,會認為是有符號數,這樣就把最高位的1當成了符號位,也就是負數(0是正數),當以%u輸出,會認為是無符號數,這樣它會將所有16位的組成都看成是數本身的組成,而沒有符號位一說,所以輸出結果是由16個1組成的二進制數。


這要看你的i+j的輸出格式的,如果是%u 輸出的話 那肯定是沒有負數的。應該是一個很大的正數。但是以%d輸出的話就會轉成int 類型了 ?就會是-14了。


3.unsigned i = 9; for(i=9; i>0; i--) { printf("%u\n", i); } 為什么會出錯。

因為:無符號數永遠沒有負數,恒大于等于0,死循環,。


總結

以上是生活随笔為你收集整理的深入理解signed、unsigned 关键字的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。