return ((ADRESH << 8) + ADRESL);这个句子中ADRESH,ADRESL都是8位的,ADRESH左移8位不是把里面的东西都移出去了吗,自己不是变成0了吗?
现在机器一般都是32bit以上的。默认转换成32bit操作后,就不会溢出了
先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用
int i = 1;
i = i
也就是说,1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成 000...0100,也就是10进制的4,所以说左移1位相当于乘以2,那么左移n位就是乘以2的n次方了(有符号数不完全适用,因为左移有可能导致符号变化,下......
答案就在这里:C语言中的左移与右移
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?
ADRESH ADRESL都是定义为char类型的话,那左移8位的话就是0了。不过这个返回值像是返回一个16位的数据。
如果是8位当然如你所说,但是我怀疑应该是16位以上,或者是源代码类型弄错了。