标题: C语言这个<<符号不是左移的意思啊? [打印本页]

作者: 永恒动力    时间: 2021-3-25 09:07
标题: C语言这个<<符号不是左移的意思啊?
IO0CLR=(1<<16);  //P1.16置为低电平
IO0CLR 是输出清零寄存器,写入1时,为底电平,写入0时无效。
后面的(1<<16)是在p1.16这个引脚写入1吗?为啥不是1左移16位了 ?这个<<符号不是左移的意思啊

作者: 张天师    时间: 2021-3-25 11:32
IO0CLR=(1<<16); 实际就是IO0CLR=0x8000; 1<<16二进制就是1000 0000 0000 0000, IO0CLR最高位对应的就是P1.16

作者: 永恒动力    时间: 2021-3-25 14:16
张天师 发表于 2021-3-25 11:32
IO0CLR=(1

IO0CLR=(1<<16);  这个代码就是第16个引脚写入1,是不是这个意思?怎么送你黑币了 ?
作者: wulin    时间: 2021-3-25 21:00
张天师 发表于 2021-3-25 11:32
IO0CLR=(1

1<<16=65536,二进制是 1 0000 0000 0000 0000
作者: comeon刘    时间: 2021-3-25 22:47
是的 << 左移 >> 右移
作者: 永恒动力    时间: 2021-3-26 08:46
wulin 发表于 2021-3-25 21:00
1


1<<16=65536 咋为65536 这个我就看不懂了
作者: cheney03    时间: 2021-3-26 08:54
永恒动力 发表于 2021-3-26 08:46
1

1<<16位就是1 0000 0000 0000 0000=2^16=65536,目的就是把P1.16位置1,其他位不变。类似的你想把P1.8位置1就是IO0CLR=(1<<8);
作者: 永恒动力    时间: 2021-3-26 09:12
cheney03 发表于 2021-3-26 08:54
1

嗯 ,明白了,谢谢,咋送你黑币?

作者: mengzhixinheng    时间: 2021-3-26 09:23
你写的是清零寄存器,如果它要有效就必须置一。也就是置一的时候达到清零的效果,但是清零不是清的输出清零寄存器而是输出寄存器。这是两个寄存器的应用。
作者: 烈火    时间: 2021-3-26 09:46
1<<16=65536  将1左移16位后,是65536
作者: lwh999995    时间: 2021-3-26 13:52
1. 左移<<就是右边添0,左移<<16就是右边16个0
2. 那么结论就是 1=0001, 0001<<16 结果就是   1 0000 0000 0000 0000  十进制就是 65536




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1