當前位置:首頁 » 編程語言 » c語言負數補碼

c語言負數補碼

發布時間: 2022-05-11 23:04:43

c語言負數的補碼怎麼轉換的如-12345怎麼轉化為53191的

數在計算機中是以二進制形式表示的。
數分為有符號數和無符號數。
原碼、反碼、補碼都是有符號定點數的表示方法。
一個有符號定點數的最高位為符號位,0是正,1是副。
以下都以8位整數為例,
原碼就是這個數本身的二進制形式。
例如
1000001
就是-1
0000001
就是+1
正數的反碼和補碼都是和原碼相同。
負數的反碼是將其原碼除符號位之外的各位求反
[-3]反=[10000011]反=11111100
負數的補碼是將其原碼除符號位之外的各位求反之後在末位再加1。
[-3]補=[10000011]補=11111101
一個數和它的補碼是可逆的。
為什麼要設立補碼呢?
第一是為了能讓計算機執行減法:
[a-b]補=a補+(-b)補
第二個原因是為了統一正0和負0
正零:00000000
負零:10000000
這兩個數其實都是0,但他們的原碼卻有不同的表示。
但是他們的補碼是一樣的,都是00000000
特別注意,如果+1之後有進位的,要一直往前進位,包括符號位!(這和反碼是不同的!)
[10000000]補
=[10000000]反+1
=11111111+1
=(1)00000000
=00000000(最高位溢出了,符號位變成了0)
有人會問
10000000這個補碼表示的哪個數的補碼呢?
其實這是一個規定,這個數表示的是-128
所以n位補碼能表示的范圍是
-2^(n-1)到2^(n-1)-1
比n位原碼能表示的數多一個

⑵ 在c語言中怎麼表示負數。

第一位符號位1為負,0為正。 正數的補碼和2進制原碼是一樣的。

負數的補碼:

1、先取絕對值|x| ;

2、對|X|+1 ;

3、對|X|+1 取反,就得到它的補碼了 。

計算機中存放整型數據都是按補碼的形式存放的。

(2)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。

⑶ C語言中負數的補碼的問題

譚浩強說的方法適用於數字位數小於字長的情況,也就是符號位不能被覆蓋。像-127,只有在規定字長大於8位(含符號位)的情況下,才能適用。兩種方法都可以。譚浩強寫的很多東西都喜歡把簡單的東西復雜化,讓新手反而不理解了。最直觀的理解方法就是方法1,負數符號位就是1,符號位不變,把去掉符號位後的絕對值部分取反,然後加1,就是負數的補碼。

⑷ C語言中為什麼用補碼表示負數,而不是直接在正數的前面加1呢

為什麼用補碼表示負數?

原理:用加法運算,也可以產生減法的效果。

目的:簡化計算機的硬體。

在兩位數之內,+99,就可以代替-1。

如:24 - 1 = 23

24 + 99 = (1) 23

只取兩位,這兩種演算法,功能就是相同的。

加上 99,就相當於,減一!

物極必反,聽說過吧?

99,就是-1 的補數。

-------------------

鍾表的分針,正撥 59,也相當於倒撥 1 分鍾!

-------------------

計算機用二進制,就改稱為:補碼。

八位二進制:0000 0000~1111 1111(十進制255)。

255(=1111 1111),就是-1 的補碼。

254(=1111 1110),就是-2 的補碼。

。。。

負數的補碼 = 2^n + 該負數。(n 是二進制的位數。)

藉助於補碼,在計算機中,只需配置一個加法器,即可。

正數,沒有補碼,直接參加計算即可。

⑸ 為什麼c語言中可以用補碼來表示負數

不是c語言用補碼表示負數,而是計算機用補碼表示負數
因為用補碼的話,加法器直接做加減運算就可以了,不再需要考慮正負號問題

⑹ c語言初學者求解關於負數補碼存儲

出去曬曬太陽吧,原理明白了就好,沒必要鑽牛角尖。

計算機存儲都是二進制,八進制和十六進制亦或十進制都是用來輸入輸出表示的,如果你的程序用來編輯或顯示內存實際數據,一般用十六進制顯示,因為十六進制相對二進制簡短而且1位16進制對應4位二進制,非常整齊,為了方便。如果你的程序用來計算一般應用,則以10進制顯示,同樣為了方便,特殊要求可以用其他任意進制顯示,根據你需求哪個方便用哪個。

編程語言中,如果定義為整數(int),計算機遇到負數就以補碼表示,此時0xffff即為-1;如果定義為uint,則不允許賦值負數(強制轉換除外),如果其值為0xffff,則表示正的65535。所以關鍵在於定義(事先約定)。

而當你得到一個數據0xffff,如果不告訴你約定,或者說數據類型,你是無法知道到底表示-1還是65535的,計算機也如此。

⑺ C語言中負數的補碼怎麼求

正數,本身就是補碼。

負數,就用它的正數,減一取反,即可得到補碼。

如,已知:+9 的二進制是:00001001。

下面求-9補碼:

先減一:00001001-1=00001000;

再取反:11110111。

所以有:-9補碼=11110111。

這不就完了嗎!

簡不簡單?意不意外?

原碼反碼符號位,討論這些垃圾幹嘛?

這些垃圾,都是用來騙吃騙喝的!

⑻ 怎麼求一個負數的原碼和補碼

正數,本身就是補碼。

負數,就用它的正數,減一取反,即可得到補碼。

如:+9 的二進制是:0000 1001。

下面求-9 補碼:

先減一:0000 1001 - 1 = 0000 1000;

再取反:1111 0111。

所以有:-9 補碼 = 1111 0111。

這不就完了嗎!

簡不簡單?意不意外?

原碼反碼符號位,討論這些垃圾幹嘛?

這些垃圾,只是那些專家用來騙吃騙喝的!

⑼ C語言中 負數在內存中為什麼要以補碼形式存儲

c的char數據屬於基本類型,基本類型其中還包括-整型,實型,枚舉類型!
數據在內存中是以二進制形式存放的。數值是以補碼表示的。
整型:
一個正數的補碼和其原碼的形式相同。而負數的補碼方式是將其絕對值的二進制形式「按位求反再加1」
實型:
在內存中佔4個位元組,是按照指數形式存儲的,實型數據分為小數部分和指數部分,分別存放!計算機用二進製表示小數部分,用2的冪次來表示指數部分!
字元型:
在內存中字元的存儲實際上是把字元相對應的ASCII代碼放到存儲單元中的。而這些ASCII代碼值在計算機中也是以二進制形式存放的。這個與整型的存儲很相似。因此這兩類之間的轉換也比較方便!

⑽ C語言之負數的補碼

對於有符號數(分正負的),的最高位是符號位
65的二進制是 0 1000001
補碼運算為按位取反 再加1
按位取反:1 0111110
加1: 1 0111111

直接轉換為十進制的話,你把它當成無符號數把1也算了,所以不是-65

從 10111111到-65:
計算機根據符號位為1判斷是負數
按位取反:01000000
加1: 01000001
這就是65,然後是負數,就是-65

熱點內容
電腦買個游戲伺服器 發布:2025-05-10 21:25:15 瀏覽:240
機櫃存儲空間 發布:2025-05-10 21:25:07 瀏覽:265
安卓手機如何修改首屏 發布:2025-05-10 21:17:59 瀏覽:958
緩存關聯替換 發布:2025-05-10 20:56:34 瀏覽:617
開源項目源碼 發布:2025-05-10 20:56:24 瀏覽:35
php文章編輯 發布:2025-05-10 20:56:21 瀏覽:981
夢世界國際版伺服器ip 發布:2025-05-10 20:35:35 瀏覽:257
編程樹遍歷 發布:2025-05-10 20:34:53 瀏覽:402
快牙怎麼傳文件夾 發布:2025-05-10 20:29:08 瀏覽:138
26個字母可以組成多少個密碼 發布:2025-05-10 20:23:21 瀏覽:620