編譯器的問題。有可友絕能你的編譯器int類型是16位的。
成都創(chuàng)新互聯(lián)公司從2013年創(chuàng)立,先為噶爾等服務(wù)建站,噶爾等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為噶爾企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
你可以把你的斗螞sum類型定義成空告埋long試一試。
確實(shí)跟補(bǔ)碼有關(guān)
計(jì)算機(jī)為了使減法變?yōu)榧臃ò沿?fù)數(shù)用補(bǔ)碼來存儲(chǔ)(正數(shù)也是只不過正數(shù)的補(bǔ)碼與原碼相同)
以鐘表為例
例如: 假設(shè)當(dāng)前時(shí)針指向10點(diǎn),而準(zhǔn)確時(shí)間是6點(diǎn),調(diào)整時(shí)間可有以下兩種撥法:
一種是倒撥4小時(shí),即:10-4=6
另孝李乎一種是順撥8小時(shí):10+8=12+6=6
計(jì)算機(jī)內(nèi)部計(jì)算類似于上面 它把(-4)變成儲(chǔ)存為12-4=8(即所謂的補(bǔ)碼)
而計(jì)算機(jī)計(jì)算10-4時(shí)它就變成10+8=18 而鐘表最大值為12所以18-12=6 于是計(jì)算就完成了
(1)正數(shù)的補(bǔ)碼:與原碼相同(因?yàn)樗旧硎羌訑?shù)計(jì)算機(jī)可以計(jì)算所以不用變)。
例如,+9的補(bǔ)碼是00001001。
(2)負(fù)數(shù)的補(bǔ)碼:符號(hào)位為1,其余位為該數(shù)絕對(duì)值的原碼按位取反;然后整個(gè)數(shù)加1。(因?yàn)樗皇鞘羌訑?shù)計(jì)算機(jī)不可以計(jì)算 所以要變成補(bǔ)碼)
例如,-7的補(bǔ)碼:因?yàn)槭秦?fù)數(shù),則符號(hào)位為“1”,整個(gè)為10000111;其余巧悉7位為-7的絕對(duì)值+7的原碼
0000111按位取反為1111000;再加1,擾銷所以-7的補(bǔ)碼是11111001。簡單點(diǎn)就是10000000( 128)-0000111(7)=11111001(121)
而C語言中有符號(hào)的整數(shù)為16位從00000000,00000000 到011111111,11111111 即0到32767為正數(shù)所以補(bǔ)碼為原碼
從11111111,11111111 到10000000,00000000
為-1到-32768
直接鎮(zhèn)弊拿0減去就行御液族,
比如:
int n=-5;
0-5 就得到了+5
這是埋運(yùn)常用的正負(fù)轉(zhuǎn)換