c負數存儲
c的char數據屬於基本類型,基本類型其中還包括-整型,實型,枚舉類型!
數據在內存中是以二進制形式存放的。數值是以補碼表示的。
整型:
一個正數的補碼和其原碼的形式相同。而負數的補碼方式是將其絕對值的二進制形式「按位求反再加1」
實型:
在內存中佔4個位元組,是按照指數形式存儲的,實型數據分為小數部分和指數部分,分別存放!計算機用二進製表示小數部分,用2的冪次來表示指數部分!
字元型:
在內存中字元的存儲實際上是把字元相對應的ASCII代碼放到存儲單元中的。而這些ASCII代碼值在計算機中也是以二進制形式存放的。這個與整型的存儲很相似。因此這兩類之間的轉換也比較方便!
B. 關於在C語言中無符號整形存儲負數問題
你的理解是對的。
最高位為1時,對於有符號來說,這個數是負數,而對於無符號數而言,由於最高位也是有效存儲位,所以可以存儲更大范圍的數。
話再說回來,既然是無符號數,輸出格式應該是"%u",而不是"%d",這樣才能做到「表裡如一」,「改頭換面」只會亂了自己,這不是游戲,嚴謹是必須的。
C. 在c語言中怎麼表示負數。
第一位符號位1為負,0為正。 正數的補碼和2進制原碼是一樣的。
負數的補碼:
1、先取絕對值|x| ;
2、對|X|+1 ;
3、對|X|+1 取反,就得到它的補碼了 。
計算機中存放整型數據都是按補碼的形式存放的。

(3)c負數存儲擴展閱讀:
有符號數的表示方法是由硬體決定,而不是由C決定的。有三種表示方法:
1、二進制原碼
0000 0001 表示 1
1000 0001 表示 -1
這個方法有個缺點是有兩個零: +0 和 -0。這會引起混淆,而且用兩個位組合來表示一個值也有些浪費。
2、二進制補碼(最普遍的系統)
區別在於 singned 和 unsigned:
1)如果是無符號位元組, 1000 0000 該組合為 128
2)如果是有符號位元組, 1000 0000 該組合為 -128
第一種表示數的范圍是 0 ~ 255;
第二種表示數的范圍是 -128 ~ +127,對於一個二進制補碼數取負數,最簡單的方法就是取反、加 1。
3、二進制反碼
通過反轉位組合中的每一位以形成一個數的負數,例如:
0000 0001 表示 1
1111 1110 表示 -1
這種方式也有一個 -0:1111 1111。其范圍是 -127 ~ +127。
D. c語言初學者求解關於負數補碼存儲
出去曬曬太陽吧,原理明白了就好,沒必要鑽牛角尖。
計算機存儲都是二進制,八進制和十六進制亦或十進制都是用來輸入輸出表示的,如果你的程序用來編輯或顯示內存實際數據,一般用十六進制顯示,因為十六進制相對二進制簡短而且1位16進制對應4位二進制,非常整齊,為了方便。如果你的程序用來計算一般應用,則以10進制顯示,同樣為了方便,特殊要求可以用其他任意進制顯示,根據你需求哪個方便用哪個。
編程語言中,如果定義為整數(int),計算機遇到負數就以補碼表示,此時0xffff即為-1;如果定義為uint,則不允許賦值負數(強制轉換除外),如果其值為0xffff,則表示正的65535。所以關鍵在於定義(事先約定)。
而當你得到一個數據0xffff,如果不告訴你約定,或者說數據類型,你是無法知道到底表示-1還是65535的,計算機也如此。
E. 為什麼c語言負數是以補碼形式存放的
為什麼 C 語言負數是以補碼形式存放的?
------------------
這個事,和 C 語言沒有任何關系。
因為,計算機本身,它就是「用補碼存儲正負數字」。
C 語言的程序,在計算機中運行,也就必須「用補碼存儲正負數」。
而且,無論你用任何編程語言編寫程序,負數,都是用補碼存放的。
F. 關於C語言負數的存儲問題。
首先要理解這個范圍怎麼來的
因為 char 和 unsigned char 是1個位元組,一個位元組=8個位,即1byte=8bit,計算機能用8個位表示的最大值就是1111 1111,即255,這是uchar 的,char型數據第8位是正負數的,所so char (-128 ~+127) 即 (正負)111 1111 ,超出范圍的賦值,就不確定它會被計算機理解成什麼了,你可以寫個測試代碼看一下
