关于C语言中左移右移的问题

return ((ADRESH << 8) + ADRESL);这个句子中ADRESH,ADRESL都是8位的,ADRESH左移8位不是把里面的东西都移出去了吗,自己不是变成0了吗?

4个回答

现在机器一般都是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位的数据。

TRYBYE
trybye 不是先计算完以后才返回的吗,左移计算的时候,直接就移没了,在计算没啥意义了把
大约 4 年之前 回复

如果是8位当然如你所说,但是我怀疑应该是16位以上,或者是源代码类型弄错了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问