0

C++に"===="のようなビット単位のコンパレータがないのはなぜですか?毎回変数をキャストする必要がありますか?

(注:私はすでに論理算術演算子を知っていて、別のことを探しています。ちなみに、算術xor a ^^ bもありません:)私はa&bをa(またはb)に対して、a^bをゼロに対してチェックできることを知っています、...)

#include "stdafx.h"
#include<iostream>
#include<stdlib.h>

int main()
{
    char a=-1;
    unsigned char b=0;

    for(b=0;b<255;b++)
    {
        if(a==b)std::cout<<(int)b;  //cannot find 11111111)2==11111111)2
                                    //ok, it looks -1==255 surely 
                  //if(a====b)std::cout<<" bitwise equal "; could be good
    }



    bool compare=true;
    bool bit1=false,bit2=false;
    unsigned char one=1;

    b=255; //bit-swise equal to a
    for(int i=1;i<7;i++)
    {
        bit1=(a>>i)&one;
        bit2=(b>>i)&one;
        if(bit1!=bit2){compare=false;return;}//checks if any bit is different 
    }

    if(compare)std::cout<<(int)b; //this writes 255 on screen

    getchar();
    return 0;
}

ありがとう。

私はできたはずです:

__asm
     {
          push push....
          mov al,[a]
          mov dl,[b]
          cmp al,dl    //this is single instr but needs others
          je yes       
          mov [compare],false
          jmp finish
          yes:
          mov [compare],true
          jmp finish

          finish:
          pop pop...

膨張したコード...

4

4 に答える 4

2

charまたはで比較を行うことはできませんunsigned char。整数昇格とは、比較できる最小の整数型が int;であることを意味します。charと の両方が 比較の前にunsigned char昇格されます。int(その後、ほとんどの最新のマシンでは、ビットごとの比較と値の比較に違いはありません。)

ビットごとの比較は必要ないと言いたくなる。多くの点で、暗黙の変換 (プロモーションを含む) は何よりも多くの問題を引き起こします。論理的には、明示的に比較したいものを指定する必要があります(また、型が の場合、等値のテストは「大まかに」保証されます。これが、 が 比較に関して定義されてunsigned charいる理由です。)memcmpunsigned char

于 2012-09-05T08:15:45.987 に答える
2

このような演算子は、プラットフォームに依存するため機能しません。

x と y の長さが異なる場合、「x === y」は false を返すはずであり、プラットフォームによって int の長さが異なるため、この操作の結果も異なると仮定します。

于 2012-09-05T07:16:49.720 に答える
2

署名されたものと署名されていないものを本当に比較する必要がありますか?

の両方のオペランドが==同じ符号を持つようにアルゴリズムを再設計する必要があります。

于 2012-09-05T07:17:11.560 に答える
1

あなたは次のようなことをすることができます:

a ^ b == 0
于 2012-09-05T07:12:09.940 に答える