求助单片机C语言大神!!!uchar temp; temp=0; P1=temp;temp++;这怎么理解?

供稿:hz-xin.com     日期:2025-01-14
单片机c语言编程语句temp=temp<<1和temp=temp<<1+1怎么理解 ,他们有什么区别?

temp=temp<<1表示将temp左移一位;temp=temp<<1+1则是将temp左移一位后加1。左移的含义:比如temp=00001111B(二进制),那么temp<<1的结果是00011110,也就是temp的数据位依次向左移动一位,最高位可以认为被舍弃,最低位由0补齐。这是基本的位运算,可以参考相关的C语法书目。

#include
#define uchar unsigned char
#define uint unsigned int
void main()
{
uint i;
uchar temp;
while(1)
{
temp = 0xfe;
for(i=0;i<8;i++)
{
P1 = temp;
delay(100);
temp <<= 1; //这样改后就可以实现依次点亮,之前是每次亮一灯。
}
}
}

74HC154 的输出 从 Y0——Y15 对应的输入是 0000——1111 ,即从 0——15,所以
当 P1 = temp;...... temp++; if(temp==16) temp=0;就是循环输入 0——15
输出就是 Y0——Y15 不断循环
实际上计算机里面的都是二进制码,只不过我们表示成十进制的而已
在计算机内存中任然以二进制存储,只是显示给我们的是十进制数
XXXX0000——XXXX1111,X 表示无关位,左边高位,右边低位