首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

异或运算符?该怎么处理

2012-03-11 
异或运算符?在标准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中是这样的。

热点排行