一个单片机c语言问题

来源:百度知道 编辑:UC知道 时间:2024/05/24 11:01:57
我在一个程序里看到下面一段程序:
if(count<=ctr)
{P1=0x01+2^temp;count++;}
if(ctr<count<8)
{P1=0x00+2^(temp-1);count++;}
ctr++;
if(ctr==8)
{ctr=0;temp++;}
if(temp==8)
{count=0;flag=6;temp=0;ctr=0;}

我知道 ^ 是按位取反的意思,但是他这里2^temp是什么意思呢?temp初值为0.请教大家
temp=0的时候2^(temp-1);怎么理解呢,2异或-1???

^ 是异或,不是按位取反,~ 才是按位取反。
计算机都是用补码表示数字的,正数的补码=本身,负数的补码=原码取反+1(符号位不算,符号位为1),
有符号数-1的二进制表示是 1111 1111(假设是signed char 型)
2等于0000 0010
2^-1即00000010^11111111等于11111101,即-3
2异或-1 等于-3

至于这段程序功能,没时间仔细分析,反正从来不会写这样糟糕的程序的

将2转为二进制:10,将temp也转为二进制:00;^号即为异或的意思,相同的位取0,相反取1,得10,即是十进制2;