繁体   English   中英

波浪号(~)运算符有什么作用?

[英]What does tilde(~) operator do?

我最近在一个代码中看到了上面的运算符,我用谷歌搜索但没有找到。代码在下面。请描述这个运算符实际上是做什么的?

#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 的语言,如 C 和 Java)中的~运算符执行按位非操作- 操作数中的所有 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)

在您的示例中, ch=~((ch^i))ch按位异或执行按位非,然后i将结果分配给ch

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

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

~ 运算符反转所有位。 所以10000001变成01111110

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

010011101

返回输出:

101100010

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM