① c語言中用unsigned表示負數
剛才在TC2.0里測試了這個程序,發現的確如樓主所說,看來是TC的問題,它在列印的時候似乎沒有理會C的類型。而在GCC下結果是c=65523
所以是什麼類型無所謂,只是溢出以及printf解析時有區別。65523按負數解析實際就是 -13
///一下引自CSDN
數值在內存中存儲時只是一串二進制數字,沒有正與負之分的,所謂的正與負是看如何去解釋這個二進制串,你在輸出的時候按照%d的方式輸出,就是告訴printf函數,輸出這個數字的時候解釋成int類型,你定義的變數的類型是給編譯器看的,而變數本身只是一個四個位元組的內存空間,你想讓它後來解釋成什麼類型就解釋成什麼類型。你可以將c程序編譯成asm程序看看,就知道,int i;和unsigned int i;之間的差別了
② 關於C語言的正負符號存儲~
你的理解是對的。
最高位為1時,對於有符號來說,這個數是負數,而對於無符號數而言,由於最高位也是有效存儲位,所以可以存儲更大范圍的數。
話再說回來,既然是無符號數,輸出格式應該是"%u",而不是"%d",這樣才能做到「表裡如一」,「改頭換面」只會亂了自己,這不是游戲,嚴謹是必須的。
③ c語言初學者求解關於負數補碼存儲
出去曬曬太陽吧,原理明白了就好,沒必要鑽牛角尖。
計算機存儲都是二進制,八進制和十六進制亦或十進制都是用來輸入輸出表示的,如果你的程序用來編輯或顯示內存實際數據,一般用十六進制顯示,因為十六進制相對二進制簡短而且1位16進制對應4位二進制,非常整齊,為了方便。如果你的程序用來計算一般應用,則以10進制顯示,同樣為了方便,特殊要求可以用其他任意進制顯示,根據你需求哪個方便用哪個。
編程語言中,如果定義為整數(int),計算機遇到負數就以補碼表示,此時0xffff即為-1;如果定義為uint,則不允許賦值負數(強制轉換除外),如果其值為0xffff,則表示正的65535。所以關鍵在於定義(事先約定)。
而當你得到一個數據0xffff,如果不告訴你約定,或者說數據類型,你是無法知道到底表示-1還是65535的,計算機也如此。
④ C語言中無符號型變數能不能存放負數
可以賦一個負數值給無符號型變數,但是無符號變數將會把這個負數的符號位也納入計算范圍,從而在使用時返回一個正數。
⑤ 為什麼c語言負數是以補碼形式存放的
以-1和+1相加為例子。
一個位元組,如果是負數,它是255,如果是正數,它是
-1。
255+1
=
256(1,0000,0000)
-1+1
=
0(0,0000,0000)
因為加到256後並不會真的進位,而是把op置位。所以整負數相加的問題很多地方都可以不去理會了。不用真正去區分正負了,只要依據最後需要的類型去處理結果就可以。
⑥ C語言中 負數在內存中為什麼要以補碼形式存儲
沒有為什麼這就是規定 知道嗎
你能高速我1+1為什麼等於2嗎
⑦ C語言正負數的存儲形式
正數以源碼形式存儲,負數以補碼形式儲存,計算機組成原理有講解的,你所說的十六進制和八進制,有正、負數之分!
⑧ C語言中負數在內存中為什麼要以補碼形式存儲
c的char數據屬於基本類型,基本類型其中還包括-整型,實型,枚舉類型! 數據在內存中是以二進制形式存放的。數值是以補碼表示的。 整型:一個正數的補碼和其原碼的形式相同。而負數的補碼方式是將其絕對值的二進制形式「按位求反再加1」實型:在內存中佔4個位元組,是按照指數形式存儲的,實型數據分為小數部分和指數部分,分別存放!計算機用二進製表示小數部分,用2的冪次來表示指數部分!字元型:在內存中字元的存儲實際上是把字元相對應的ASCII代碼放到存儲單元中的。而這些ASCII代碼值在計算機中也是以二進制形式存放的。這個與整型的存儲很相似。因此這兩類之間的轉換也比較方便!
⑨ c語言中負數是按補碼存儲,怎麼讀出來哪
本質是,都是二進制數,或者是十六進制數。
舉個例子:
-1,在16位CPU中,用補碼表示,則為1111 1111 1111 1111,或者0xFFFF。
在C語言中,如果定義為無符號數,則0xFFFF讀出來就是65535,
如果定義為有符號數,則0xFFFF讀出來就是-1。
同樣的二進制數,類型不同,解釋出來的結果也不同。
⑩ 關於C語言負數的存儲問題。
首先要理解這個范圍怎麼來的
因為 char 和 unsigned char 是1個位元組,一個位元組=8個位,即1byte=8bit,計算機能用8個位表示的最大值就是1111 1111,即255,這是uchar 的,char型數據第8位是正負數的,所so char (-128 ~+127) 即 (正負)111 1111 ,超出范圍的賦值,就不確定它會被計算機理解成什麼了,你可以寫個測試代碼看一下