unsigned signed型別區分很重要

2021-06-03 18:21:55 字數 662 閱讀 8541

也許,我們寫起**來隨手就是定義乙個int 或者char型的資料。

我們有沒有想過這個資料到底是有符號還是無符號呢,它到底需要乙個符號嗎,會溢位嗎?

比如最簡單的兩行**

char ch = 0x90;

printf("%02x", ch);

你期待什麼輸出結果, 是90嗎?

但是結果可能不是你想的

得出結果是ffffff90,到底是為什麼呢?

char型在我的平台上預設是signed char,也就是有符號的, 那麼0x90就表示乙個負值了,也就是-0x70

那麼這個值,用「%02x」 列印出來是多少呢

就是ffffff90(注意計算機中用補碼表示)。

這顯然不是我們需要的。

當以unsigned char ch = 0x90;

結果就同我們預期的一樣了。

今天想把linux下的正文段打出來看一下,結果就做了個從0x80480000開始的列印程式,結果並不是每行輸出32個位元組(

我的程式中是以「%02x」列印的,迴圈32次)

所以,以後在寫**的時候,一定要注意,型別太重要了,看似沒問題,其實到處是問題。

好像看過一本書上講,看乙個人的**寫的怎麼樣,就看看他會不會在變數前註明變數符號,會不會在有的引數

前加上必要的const。這是後話了。

類值類與類指標類

類值類 行為像值的 class a a const a a ps new string a.ps i a.i 每個類物件有自己的乙份資源拷貝 a operator const a rhs a private string ps int i 一種優化拷貝賦值運算子的方法 copy and swap c...

巢狀類 匿名類 密封類

巢狀類 在c 中可以將乙個類定義在另乙個類的內部,外部的叫外部類,內部的巢狀類 namespace 27 set public void hello 巢狀類 public class web webname,weburl class program 匿名類 如果某個類的例項物件只會使用到一次,可以使...

點類,圓類,圓柱類

print?copyright c 2012,煙台大學計算機學院 all rights reserved.檔名稱 text.cpp 作 者 胡穎 完成日期 2013年5月20日 版 本 號 v1.0 輸入描述 無 問題描述 1 先建立乙個point 點 類,包含資料成員x,y 座標點 2 以poin...