web-dev-qa-db-ja.com

〜演算子は何をしますか?

私は最近、コードで上記の演算子を見つけましたが、私はそれをグーグルで探しましたが、何も見つかりませんでした。コードは以下です。この演算子が実際に何をするのか説明してください

#include<stdio.h>
int main()
{
    unsigned long int i=0;
     char ch;
    char name1[20],name2[20];
    FILE *fp,*ft;
    printf("ENTER THE SOURCE FILE:");
    gets(name1);
    printf("ENTER THE DESTINATION FILE:");
    gets(name2);
    fp=fopen(name1,"r");
    ft=fopen(name2,"w");
    if(fp==NULL)
    {
        printf("CAN,T OPEN THE FILE");
    }
    while(!feof(fp))
    {
         ch=getc(fp);
         ch=~((ch^i));/*<--Here*/
        i+=2;
        if(i==100000)
        {
             i=0;
        }
     putc(ch,ft);
    }
    fclose(fp);
    fclose(ft);
    return 0;
}       
42
Fahad Uddin

C++(およびCやJavaなどの他のC言語のような)の_~_演算子は、 ビットごとのNOT演算 を実行します-オペランドのすべての1ビットが0に設定され、すべてのビットが0に設定されますつまり、元の数のcomplementを作成します。

例えば:

_10101000 11101001 // Original  (Binary for -22,295 in 16-bit two's complement)
01010111 00010110 // ~Original (Binary for  22,294 in 16-bit two's complement)
_

あなたの例では、ch=~((ch^i))chiの-​​ bitwise XOR に対してビットごとのNOTを実行し、chに結果を割り当てます。

ビット単位のNOT演算子には、 2の補数 で表される数値に適用されると、数値の符号を変更してから1を減算する興味深い特性があります(上記の例を参照)。

検索エンジンで演算子を検索するのは難しいため、 C++言語のさまざまな演算子 に慣れておくとよいでしょう。さらに良いのは、C++演算子について説明する 優れたC++ブック を入手できることです。

68
In silico

〜演算子は、すべてのビットを反転します。したがって、1000000101111110になります。

17
JoshD

これはビット単位の補数演算子です。与えられた入力

010011101

出力を返します:

101100010

12
Erkan Haspulat