作《c和指针》课后练习时关于char型溢出的一个疑惑

做《c和指针》课后练习时关于char型溢出的一个疑惑
有两个问题
原题是这样的:
编写一个程序,从标准输入读取一些字符,并把它们写到标准输出上。它同时应该计算checksum值,并写在字符的后面。
checksum(检验和)用一个signed char变量进行计算,它初始为-1。当每个字符从标准输入读取时,它的值就被加到checksum中。如果checksum变量产出溢出,那么这些溢出就会被忽略。当所有的字符均被写入后,程序以十进制整数的形式打印出checksum的值,它有可能是负值。注意在checksum后面要添加一个换行符。在使用ASCII码的计算机中,在包含“Hello world!"这几个词并以换行符结尾的文件上运行这个程序应该产生下列输出:
Hello world!
102

我分步打印出了checksum的值,如图:
作《c和指针》课后练习时关于char型溢出的一个疑惑

但是在手动计算过程中发现有一点不符,
71+e的ascii值101是172,因为溢出,转换成二进制10101100取补码再转换成十进制应该是-83,为什么显示的是-84呢?
然后-84+l的ascii值108,正好是24,此时又没有问题,为什么呢?

还有《c和指针》这本书上char型范围是-127到127,但是我们通常不是认为是-128到127吗?
------解决思路----------------------
char型范围是-127到127 是这样的 -128  这个数值,已经溢出了 
最高位同时表示 符号,和值
0x80 二进制为 1000 0000 
本来应该是 128 但是 符号位是负值
实际应该表示为 1 1000 0000 ,不是8 位数数了
所以是 -128 

早期char型范围,确实是 -128 ~127 
如今已经改为 -127 ~127了 
 -128 应该表示为 -127 - 1 其实还是 0x80 


------解决思路----------------------
补码表示的数的绝对值是  取反 + 1,  10101100 按位取反后是 83,再加 1 就是 84 了。同理,0x80 表示的有符号数也是 -128.