float a=0.1;
float b=0.2;float c;c=a^b;//出错怎样才是正确的

解决方案 »

  1.   

    NOR运算的定义本来是针对二进制位,对浮点数没有定义,不知道你如何定义浮点数的NOR运算,如果你有定义,可以重载^运算符:float operator^(float op1,float op2)
      

  2.   

    十进制float化二进制,不一定能化成有限小数啊
      

  3.   

    按照代数上的定义float不能异或,代数上的定义的异或是对位的,可以扩展到整数:
    比如:
    0^0=0
    1^0=1
    1^1=0你首先要自己定义float异或的含义,我不知道你如何定义,比如你说0.1^0.2应该等于多少?首先在代数上定义float异或的含义,然后再自己实现。
      

  4.   

    c = (float)( ( *((unsigned int*)&a )^ *((unsigned int*)&b ) ) )
      

  5.   

    如果你只是想获得两个浮点数的二进制异或,可以这样做:
    union F2DW{
      float fParam;
      DWORD dwParam;
    };F2DW fdw1,fdw2,fdw3;
    fdw1.fParma = 0.1;
    fdw2.fParam = 0.2;
    fdw3.dwParam = fdw1.dwParam ^ fdw2.dwParam;我曾经用这个办法做过数据校验,不知对你是否有用。
      

  6.   

    如果是对float的二进制位进行异或,安全的方法应该是:float operator^(float a,float b)
    {
        int i;
        float fResult;
        for(i=0;i<sizeof(float);i++)
        {
             ((char *)(&fResult))[i]=((char *)(&a))[i]^((char *)(&b))[i];
        }
    }这个方法不依赖于sizeof(float)==sizeof(int)
      

  7.   

    对不起,错了,应该是:float operator^(float a,float b)
    {
        int i;
        float fResult;
        for(i=0;i<sizeof(float);i++)
        {
             ((char *)(&fResult))[i]=((char *)(&a))[i]^((char *)(&b))[i];
        }
        return fResult;
    }
      

  8.   

    在浮点数的数据结构中,是不存在着异或一说的,那是整数那有的,要看你的具体应用,但或许可以分别把整数部分与小数部分进行异或后再合并:
    float XorFloat(float a, float b)
    {
    #define MOD_MAX 0xFFFFFFFF int nA, nB, nC;
    int xA, xB, xC;
    float fRet; nA = (int)a;
    nB = (int)b;
    nC = nA ^ nB; xA = (int)(MOD_MAX * (a - nA));
    xB = (int)(MOD_MAX * (b - nB));
    xC = xA ^ xB; fRet = nC + (float)xC / MOD_MAX; return fRet;
    }