私は最近、コードで上記の演算子を見つけましたが、私はそれをグーグルで探しましたが、何も見つかりませんでした。コードは以下です。この演算子が実際に何をするのか説明してください
#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;
}
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))
はch
とi
の- bitwise XOR に対してビットごとのNOTを実行し、ch
に結果を割り当てます。
ビット単位のNOT演算子には、 2の補数 で表される数値に適用されると、数値の符号を変更してから1を減算する興味深い特性があります(上記の例を参照)。
検索エンジンで演算子を検索するのは難しいため、 C++言語のさまざまな演算子 に慣れておくとよいでしょう。さらに良いのは、C++演算子について説明する 優れたC++ブック を入手できることです。
〜演算子は、すべてのビットを反転します。したがって、10000001
は01111110
になります。
これはビット単位の補数演算子です。与えられた入力
010011101
出力を返します:
101100010