66问答网
所有问题
51单片机移位操作问题
b=((c<<4)>>4)的结果还是c,没有变化。b=c<<4;b=b>>4的结果是取了c的低4位。第一种操作为什么不对?
举报该问题
推荐答案 推荐于2016-05-15
怀疑是编译器在编译时做的编译优化导致,
b=((c<<4)>>4)这条指令,只输出一次结果,
其它都是中间过程,在编译器执行编译时,
而执行的中间过程会被编译器以最有效率的执行方式予以优化,
所以这条代码编译后的指令可能是什么也不做
(当然验证方法就是去看编译出来的对应代码了),
b=c<<4;b=b>>4这两条指令,
必须先对c做一次移位运算并赋值给b(第一条指令),
此时c的高位已经被丢弃,
然后再对b自身做一次移位运算,c高位已丢弃,找不回,
所以此时只有c的低四位保存下来。
温馨提示:答案为网友推荐,仅供参考
当前网址:
http://66.wendadaohang.com/zd/nUpiDiip9sxsDDxn2ni.html
其他回答
第1个回答 2014-09-12
左移、接着右移,编译软件可能就偷懒了,根本就不给你移动。
C 语言这东西,看似简单,其实,步步是坑。
汇编语言,就透亮多了。
第2个回答 2021-06-25
这是编译器优化问题,可以降低编译器优化等级
第3个回答 2014-09-12
移位操作问题
相似回答
51单片机移位操作问题
答:
必须先对c做一次移位运算并赋值给b(第一条指令)
,此时c的高位已经被丢弃,然后再对b自身做一次移位运算,c高位已丢弃,找不回,所以此时只有c的低四位保存下来。
51单片机移位问题
答:
DJNZ R3,DEL 就这样可以了。只要用个R1把A的值先保存,然后等会拿出来跟
左移
后的A相或就可以了。
51单片机
多字节
移位
为什么清符号位,搞不清它的工作流程
答:
这是为了保留符号位,并防止符号位右移后串入数据位造成运算错误
。比方说有符号数 1100,右移后应为1010而不是0110(变号了)、第一次右移完后,高字节的最低位进入了Carry位,继续参与低字节的移位。
求教:
51单片机
,十六位二进制数乘以2后放回原单元,用
移位
的方法怎么做...
答:
左移其实就是乘法
。例如十进制;10左移一位就是100,相当于10*10;二进制:10左移一位就是100,从原先的2变为4,就是乘以2;左移一位就是把原来的数乘以"进制".二进制x2就是左移一位。
关于
51单片机
矩阵键盘
移位
输入的疑问,为什么我这样写在低四位数码管显 ...
答:
还有你这里没有去抖,当按键按下时,会出错,P2 = TestKeyCode;if(!P23){ ScanKeyCode = 4*i + 1;break;} else if(!P22){ ScanKeyCode = 4*i + 2;break;} else if(!P21){ ScanKeyCode = 4*i + 3;break;} else if(!P20){ ScanKeyCode = 4*i + 4;break;} ...
为什么
51单片机
的P0口不能用
移位
函数?
答:
程序有错误,了解上的错误,P0口系地址,不是直接数,所以不可以这样
操作
,还有你没有延迟函数,看不到效果的 更正如下:include <reg
51
.h> include <intrins.h> define uchar unsigned char define uint unsigned int void delay(){ uchar x,y;for(x=100;x>0;x--)for(y=110;y>0;y--) ;...
大家正在搜
51单片机的移位
51单片机移位指令
51单片机右移位函数
单片机提问有关问题
单片机中0x01移位
单片机移位
单片机移位运算
单片机移位函数
单片机移位指令的用法
相关问题
51单片机左移的问题
51单片机移位问题
单片机 移位 问题
单片机 移位操作 右移 C语言
单片机按键移位的问题
C语言51单片机左移函数的问题
51单片机不能对端口进行循环左移,简单问题求大神
51单片机执行循环右移指令的问题