C语言 左移位的问题,求大神,帮忙解释一下!!! 关于C语言左移/右移的问题

C\u8bed\u8a00 \u5de6\u79fb\u4f4d\u7684\u95ee\u9898\uff0c\u6c42\u5927\u795e\uff0c\u5e2e\u5fd9\u89e3\u91ca\u4e00\u4e0b\uff01\uff01\uff01

aa=0001`0010(2).
aa<<3=000`1001`0000=90(10)(\u5c31\u662f\u5728\u540e\u9762\u586b3\u4e2a0\uff0c\u7ed3\u679c\u548c\u8f93\u51fa\u4e00\u6837\uff09
aa<<4=0001`0010`0000=120\uff0810\uff09\uff08\u4e5f\u548c\u8f93\u51fa\u4e00\u6837\uff09
\u697c\u4e0a\u597d\u50cf\u90fd\u4e0d\u5bf9

Hbyte_later = HByte << 8; //\u8fd9\u91cc\u5e76\u6ca1\u6709\u4f7fHByte\u6210\u4e3a0\uff01\uff01\u800c\u662fHbyte_later=00100 1010 //\u8fd9\u662f4a\u7684\u4e8c\u8fdb\u52361000 0000 //\u8fd9\u662f80\u7684\u4e8c\u8fdb\u52364a\u5de6\u79fb8\u4f4d0100 1010 0000 0000 //\u5bf9\u5e94\u768410\u8fdb\u5236\u503c\u4e3a18944\uff0c\u4e1480\u5bf9\u5e94\u768410\u8fdb\u5236\u4e3a127/** 18944+127\u4e3a\u4ec0\u4e48\u4e0d\u80fd\u7b49\u4e8e19072\uff1f*/\u8fd9\u6b21\u7b54\u9898\uff0c\u8fd9\u4e48\u7528\u5fc3\uff0c\u9898\u4e3b\u8fd8\u662f\u591a\u7ed9\u70b9\u5206\u5427

左移一位后最右位补0,移几位补几个0;
左移时最高位在c里面丢弃了。
因为汇编里面只有两种移位:不带CY的循环移位 和带CY的循环移位。CY是进位标志位
不带CY的循环移位是假设左移的话,是把最左位放到最右位了。
带CY的把最左位放进CY,CY的原值放最右位。
C语言的左移运算可以理解为先将CY置0,然后执行带CY的循环移位操作。移位后CY的值是原来的最左位,CY里的0被移到最右位

扩展阅读:扫一扫题目出答案 ... c语言中 是取余还是去整 ... c#菜鸟教程 ... c语言左移右移补0还是1 ... c语言字母表循环后移n位 ... c语言右移运算 ... c语言左移位和右移位 ... c#缺少程序集引用 ... c语言好难学啊 怎么办 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网