十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
编译器的问题。有可友绝能你的编译器int类型是16位的。
成都创新互联公司从2013年创立,先为噶尔等服务建站,噶尔等地企业,进行企业商务咨询服务。为噶尔企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
你可以把你的斗蚂sum类型定义成空告埋long试一试。
确实跟补码有关
计算机为了使减法变为加法把负数用补码来存储(正数也是只不过正数的补码与原码相同)
以钟表为例
例如: 假设当前时针指向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
直接镇弊拿0减去就行御液族,
比如:
int n=-5;
0-5 就得到了+5
这是埋运常用的正负转换