當前位置:首頁 » 編程語言 » c語言轉換補碼輸出
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言轉換補碼輸出

發布時間: 2022-05-27 21:11:34

1. 剛接觸c語言 是說輸入的時候 電腦當做補碼 然後輸出原碼嗎

「輸入的時候 電腦當做補碼 然後輸出原碼」 這樣說是不正確的。

計算機存儲整型數據都是採用補碼來表示的。用補碼
1.解決了+0,-0的問題,
2.所有的運算都可以採用加法來實現

我們在輸入數據的時候,都是人現實生活中能理解的數:如,10進制數,計算機在存儲的時候會自動轉換成補碼來存放和運算。 輸出時,又會按人的要求,自動轉換成相應的可識別的數據來顯示。
short在32位以上的機器上占兩個位元組,是個有符號數,能表示的數據范圍為:-32768~32767。你輸入65535,走出它的表示範圍,計算機中存儲的是16個1,對於short類型,16個1表示的是-1,所以,你的輸出是-1

2. 在C語言中,整數的數值是以補碼形式存放的,補碼是什麼意思啊

使用補碼代表負數,就可以把減法,轉化為加法運算。

那麼,在計算機中只要有一個加法器,就可以做加、減法了。

使用補碼的意義,就是簡化了計算機的硬體。

常識:時鍾倒撥 3 小時,可以用正撥 9 小時代替。

怎麼計算,自己推導吧。

--------

兩位十進制數,共有 100 個數字:00~99。

那麼,減一,就可以用 +99 代替:

25-1 = 24

25 + 99 = (1) 24

取後兩位,忽略進位 100,結果,不就是相同的嗎?

只要利用一個「較大的正數」代替負數,就能把減法變加法了。

這個較大的正數,就是負數的補數

計算公式:-1 的補數=100-1 = 99。

-2 的補數=100-2 = 98。

。。。

--------

計算機中,使用的是二進制。

二進制的補數,就改稱為補碼

八位二進制數,共有 256 個數字:0000 0000~1111 1111。

那麼,-1 的補碼就是 1111 1111 = 255(十進制)。

同理,-2 的補碼就是 1111 1110 = 254(十進制)。

。。。

最後,-128的補碼就是 1000 0000 = 128(十進制)。

計算公式:負數的補碼=【256+這個負數】

零和正數,不需要求補數(補碼),直接計算即可。

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

這是有符號和無符號數值的理解,這個數在內存中的值是一樣的。
二進制
1100
1111
1100
0111
如果按有符號位進行表示就是:-12345
如果按無符號的整數來理解,表示後就是:
53191
轉換代碼:
int
x=
-12345;
printf("%d
%d\n",x,(unsigned)(x&0xffff));
補充
對於你說的問題,可以先看-1補碼
我們先看-1絕對值的二進制是0000
0001(對於把為存儲)
第一位是符號
接下來去補碼為取反操作:1111
1110
在加1
的1111
1111

4. C語言原碼補碼問題

你的這個是16的,我可以給你用8位解釋一下(原理是一樣的,我打起來比較方便~)

我們知道,8位二進制的補碼表示範圍是-128~127對吧。

而在計算機中數據都是以二進制補碼進行存儲的,那麼-128的存儲方式就是1000 0000,而它是沒有原碼和反碼的,所以你不太能驗證,對吧。

這是因為在計算機中,為了溢出特意定義的一個小玩意兒~

所以放到16來解釋,它的最小值也是-32768。

但這已經是最小的數了,再減就會溢出……(理論上是這樣的)

但是現實中的程序編譯有一定的容錯性,只要到了一定的計算機承認的位數就變成-1了。

這是因為計算機中的數好像一個輪回……

(我的計算機是32位的~)


經過實踐驗證了我說的東西……


如果你的程序要求指定了16位,那麼就是-1,如果高於16位,就是 -32769。