c语言的左移运算符

temp=0x01;for(i=0;i<8;i++){P1=~temp;delay(1500);temp<<=1;}为什么计算出来的数据了二进制1111111011111... temp=0x01;
for(i=0;i<8;i++)
{
P1=~temp;
delay(1500);
temp<<=1;
}
为什么计算出来的数据了
二进制 1111 1110
1111 1101
1111 1011 .....
是不是把最前面的1拿到最后面,然后其他数据都前进一位?

加入上面正确的话,那为什么下面这个是正确的
temp=0x7F;
for(i=0;i<8;i++)
{
P1=temp;
delay(100);
temp>>=1;
}
他的答案是 二进制 0111 1111 ;0011 1111; 0001 1111。。。这样的。
请问为什么啊
~temp只是求反并不改变temp本身的值, 可以详细点跟我说下嘛?我看不懂!
展开
 我来答
tattackor
推荐于2017-10-05 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:897万
展开全部
1、用来将一个数的各二进制位全部左移若干位。
2、例如:
将a的二进制数左移2位,右补0。若a=15,即二进制数00001111,左移2位得00111100,即十进制数60(为简单起见,用8位二进制数表示十进制数15,如果用16位二进制数表示,结果是一样的)。
百度网友c61d935a2
2010-04-25 · TA获得超过224个赞
知道答主
回答量:103
采纳率:0%
帮助的人:151万
展开全部
为什么计算出来的数据了
二进制 1111 1110
1111 1101
1111 1011

估计楼主你的这些数据应该是p1的,而temp的值是
二进制 0000 0001
0000 0010
0000 0100

注:
~temp只是求反并不改变temp本身的值,
对temp向高位移,低位是补0的而不会把前面的1换到后面来,
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式