當前位置:首頁 » 編程語言 » c語言中正數變負數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言中正數變負數

發布時間: 2022-09-19 12:30:21

c語言正數和負數的切換是怎麼樣做到

main(){
int i,k=1;
for(i=1;i<10;i++){
k=-1*k;
printf(" %d",i*k);}
}

運行一下,你就知道了

⑵ 請問C語言中我想把一個正數變為負數怎麼變 例如:9變成-9

確實跟補碼有關
計算機為了使減法變為加法把負數用補碼來存儲(正數也是只不過正數的補碼與原碼相同)
以鍾表為例
例如: 假設當前時針指向10點,而准確時間是6點,調整時間可有以下兩種撥法:
一種是倒撥4小時,即:10-4=6
另一種是順撥8小時:10+8=12+6=6

計算機內部計算類似於上面 它把(-4)變成儲存為12-4=8(即所謂的補碼)
而計算機計算10-4時它就變成10+8=18 而鍾表最大值為12所以18-12=6 於是計算就完成了

(1)正數的補碼:與原碼相同(因為它本身是加數計算機可以計算所以不用變)。
例如,+9的補碼是00001001。

(2)負數的補碼:符號位為1,其餘位為該數絕對值的原碼按位取反;然後整個數加1。(因為它不是是加數計算機不可以計算 所以要變成補碼)
例如,-7的補碼:因為是負數,則符號位為「1」,整個為10000111;其餘7位為-7的絕對值+7的原碼
0000111按位取反為1111000;再加1,所以-7的補碼是11111001。簡單點就是10000000( 128)-0000111(7)=11111001(121)

而C語言中有符號的整數為16位從00000000,00000000 到011111111,11111111 即0到32767為正數所以補碼為原碼

從11111111,11111111 到10000000,00000000
為-1到-32768

⑶ c語言中為什麼會出現正數加正數是負數的情況

如果涉及非常大的數,有可能會溢出.C語言最大可顯示65535,即2^16-1;最高位(二進制第16位)為1表示負數.如果兩數的和大於65535,則只能顯示負數.
如果1+2=-48,這肯定不是相加的結果.你可能調用了其它的函數.

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

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

負數的補碼:

1、先取絕對值|x| ;

2、對|X|+1 ;

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

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

(4)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語言中執行兩個正數相加結果怎麼會是負數呢

這和C語言中數據的儲存有關。C語言中數據的儲存空間是有限的,比如說整型數據,佔四個位元組,從而整型數是有范圍的,從-2^31+1到2^31,正負號根據二進制數第一位決定。並且運算是以二進制來進行的,當兩個數加和超出范圍時,自動捨去超出的位數(二進制),所以當然可能兩個很大的正數相加等於負數咯。

⑹ C語言如何實現正負交替

標記法
flag默認為1
flag = -flag;
if(flag==1) 正數

else 負數

判斷循環i值法:
for(i=1;i<=n;i++)
if(i%2==1) 正數
else 負數

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

第一位符號位1為負,0為正。
正數的補碼和2進制原碼是一樣的。
負數的補碼:
1、先取絕對值|x|

2、對|X|+1

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

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

(7)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語言正數相加變負數

編譯器的問題。有可能你的編譯器int類型是16位的。

你可以把你的sum類型定義成long試一試。

⑼ C語言中如何把正數轉換成負數

直接拿0減去就行,
比如:
int n=-5;
0-5 就得到了+5
這是常用的正負轉換