有两个问题
原题是这样的:
编写一个程序,从标准输入读取一些字符,并把它们写到标准输出上。它同时应该计算checksum值,并写在字符的后面。
checksum(检验和)用一个signed char变量进行计算,它初始为-1。当每个字符从标准输入读取时,它的值就被加到checksum中。如果checksum变量产出溢出,那么这些溢出就会被忽略。当所有的字符均被写入后,程序以十进制整数的形式打印出checksum的值,它有可能是负值。注意在checksum后面要添加一个换行符。在使用ASCII码的计算机中,在包含“Hello world!"这几个词并以换行符结尾的文件上运行这个程序应该产生下列输出:
Hello world!
102
我分步打印出了checksum的值,如图:
但是在手动计算过程中发现有一点不符,
71+e的ascii值101是172,因为溢出,转换成二进制10101100取补码再转换成十进制应该是-83,为什么显示的是-84呢?
然后-84+l的ascii值108,正好是24,此时又没有问题,为什么呢?
还有《c和指针》这本书上char型范围是-127到127,但是我们通常不是认为是-128到127吗?