变量在计算机中以补码方式储存,那如果两个负数想加的时候符号位动吗

变量在计算机中以补码形式储存,那如果两个负数想加的时候符号位动吗?
char a[1000];
int i;
for(i = 0; i<1000; i++)
{
a[i] = -1-i;
}
printf("%d\n", strlen(a));//这个打印出来是255


两个补码形式存储的数相加时,如果最高位(符号位)有进位时则进位被省略,那如果两个负数相加得到的是正数吗?计算机的运算规则是什么?求大侠指点

------解决方案--------------------
实际上是因为你的i为255时a[i]=0,而strlen实际上是统计到字符0结束,所以长度为255。
------解决方案--------------------
计算机运算是以补码的形式进行,两个负数相加时,符号位不变,如果溢出的话,有些会报错,有些自动取余下的数。
------解决方案--------------------
当然不动。

探讨

计算机运算是以补码的形式进行,两个负数相加时,符号位不变,如果溢出的话,有些会报错,有些自动取余下的数。

------解决方案--------------------
探讨

那就是负数相计算的时候不会算符号位,而负数与负数相间的时候如果符号位有进位的时候符号位为0,还是舍弃了那个进位,要不怎么会出现正数呢

------解决方案--------------------
打印出来是255的主要原因是 数据溢出,你的 i 是 int, 运算是发生了 整型提升
------解决方案--------------------
《深入理解计算机系统》第42页
C/C++ code

C语言标准并没有要求用补码形式来表示有符号整数,但是几乎所有机器都是这么做的