异或运算符?在标准C当中 , ^是异或运算符, 但是在keil C当中,有这种定义sbit0VPSW^2意思是从psw(状态寄
异或运算符?
在标准C当中 , ^是异或运算符, 但是在keil C当中,有这种定义sbit0V=PSW^2;意思是从psw(状态寄存器)的首地址偏移两位,我想知道,这种"位偏移"操作符的作用是标准C来的吗?
C/C++ code
int i=-3;
printf("%d\n",i^0);
printf("%d\n",i^1);
printf("%d\n",i^2);
printf("%d\n",i^3);
printf("%d\n",i^4);
结果
-3
-4
-1
-2
-7
为何出这样的结果,请高手解释一下原理.谢谢
[解决办法]以8位数为例
1111 1101 xor 0000 0000 = 1111 1101 = -3补
1111 1101 xor 0000 0001 = 1111 1100 = -4补
1111 1101 xor 0000 0010 = 1111 1111 = -1补
1111 1101 xor 0000 0011 = 1111 1100 = -2补
1111 1101 xor 0000 0100 = 1111 1001 = -7补
至于取某个可位寻址字节地址(或SFR)的某位,是C51对C的扩展,与异或没有什么关系吧,
[解决办法]^ 在预定义中和函数中的含义不是完全一样的!
在预定义中表示去前面直接的第几位
如
sbit k=P1^1; k指向P1-1口
而在函数中,表示 位异或
关于位异或 自己查看一下相关质料
[解决办法](撞枪口上了!这东西正好我搞过……)
Keil在实现它的C时,对ANSI的C进行扩展,这其中就有“重载”了'^'运算符。
在且仅在使用sbit定义一个单比特变量时,'^'才有取字节的第几位这个意思;
其他情况下,'^'就是ANSI中的按位异或运算符。
我基本上肯定,至少在μversion3中是这样的。