〜操作员做什么?

fud*_*din 43 c cryptography

我最近在代码中看到了上面的运算符,我用Google搜索但没有发现任何内容.代码如下.请说明这个运算符实际上做了什么?

#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;
}       
Run Code Online (Sandbox Code Playgroud)

In *_*ico 70

~C++中的运算符(以及其他类C语言,如C和Java)执行按位NOT运算 - 操作数中的所有1位都设置为0,操作数中的所有0位都设置为1.换句话说,它创建原始数字的补充.

例如:

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)
Run Code Online (Sandbox Code Playgroud)

在你的榜样,ch=~((ch^i))在执行按位非按位异或chi,然后分配结果ch.

按位NOT运算符有一个有趣的属性,当应用于由二进制补码表示的数字时,它会更改数字符号然后减去一个(如上例所示).

您可能希望熟悉C++语言的不同运算符,因为很难在搜索引擎上搜索运算符.更好的是,你可以获得一本很好的C++书籍,它将告诉你C++运算符.

  • 有[谷歌代码搜索](http://www.google.com/codesearch),但我不能保证找到*关于*符号的帮助,以便找出他们的用例;) (3认同)

Jos*_*shD 17

〜运算符反转所有位.因此10000001变得01111110.


Erk*_*lat 12

它是按位补码运算符.鉴于输入

010011101

返回输出:

101100010