单片机编程,位移运算符,二进制1000 0000左移一位后变成多少?
答案:2 悬赏:10 手机版
解决时间 2021-03-17 03:22
- 提问者网友:相思似海深
- 2021-03-16 17:52
单片机编程,位移运算符,二进制1000 0000左移一位后变成多少?
最佳答案
- 五星知识达人网友:时间的尘埃
- 2021-03-16 18:40
变成了0;追问确定?左移和右移具体怎么运算的?追答赋给单字节的数据就是0 ,如果16位或者32位的话变成了256;当然还得看CPU多少位的;左移就低位补0,高位往上走;追问二进制中,左移和右移具体怎么运算的?追答左移低位补0,右移高位补0;比如00010000;右移一位变成00001000;左移一位的话变成00100000;追问这样的话,如果一串二进制数一直进行位移的话,是不是最后都会变成零?追答是的;最后都变成0;
全部回答
- 1楼网友:怙棘
- 2021-03-16 19:29
1000 0000左移后全是0了
P1>>=1;这条语句其实是P1=P1>>1; 也就是说 要先读P1 再运算,再赋值,如果读的时候有问题,就后边都有问题,有的单片机是这样的,读是直接读端口状态,这个状态会被外围电路影响,而不是你预期的值,所以不可靠。
可靠的方法是:
unsigned char p1val;
p1val=0xff;
for(i=0;i<8;i++)
{
p1vap=(p1val>>1);//加括号,保证运算优先级不出错误
P1=p1val;
}
P1>>=1;这条语句其实是P1=P1>>1; 也就是说 要先读P1 再运算,再赋值,如果读的时候有问题,就后边都有问题,有的单片机是这样的,读是直接读端口状态,这个状态会被外围电路影响,而不是你预期的值,所以不可靠。
可靠的方法是:
unsigned char p1val;
p1val=0xff;
for(i=0;i<8;i++)
{
p1vap=(p1val>>1);//加括号,保证运算优先级不出错误
P1=p1val;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯