对于移位操作符 << 或者 >>,这是双目操作符,有两个操作数。在C标准中规定,移位时被移位数(左操作数)有个类型转换,规则如下:
如果左操作数当前类型的有符号数范围小于高于其类型一级(int > short > char)的有符号数的范围,那么操作数当前类型的无符号数会转换为高一级类型的有符号数。在这里就是,unsigned char类型的数据左移8位,类型转换为short类型,然后unsigned char类型的数据再加short类型的数据,最终结果就是一个有符号的short类型的数据。
我也遇到过一样的问题,h t t p : / / note.youdao.com/share/?id=207bd80acb67bfe4919cc9c1006772f6&type=note