【问题标题】:What does tilde(~) operator do?波浪号(~)运算符有什么作用?
【发布时间】:2011-04-26 12:17:10
【问题描述】:

我最近在一个代码中看到了上面的操作符,我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;
}       

【问题讨论】:

标签: c cryptography


【解决方案1】:

C++(以及其他类似 C 的语言,如 C 和 Java)中的 ~ 运算符执行 bitwise NOT operation - 操作数中的所有 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))chibitwise XOR 执行按位非运算,然后将结果分配给ch

按位非运算符有一个有趣的属性,当应用于two's complement 表示的数字时,它会更改数字的符号,然后减一(如您在上面的示例中所见)。

您可能想熟悉the different operators of the C++ language,因为很难在搜索引擎上搜索运算符。更好的是,您可以获取a good C++ book,它将告诉您有关 C++ 运算符的信息。

【讨论】:

  • 有没有可以搜索符号的搜索引擎?
  • @Jon Rodriguez:据我所知没有。如果您需要查找特定编程语言的符号或运算符,最好直接搜索该语言(如“C++ 编程语言”)。
  • Google Code Search,但我不能保证它有助于找出 about 符号以及找出它们的用例 ;)
  • @Jon:如果您知道字形的名称 Google 搜索“C 代码波浪号”会产生答案,这会有所帮助。但话又说回来,“C 编程语言运算符”也是如此 - 当然你会得到 all 运算符,但这已经足够狭窄,可以找到我建议的答案!
  • @Insilico 虽然您的答案的基本细节是正确的,但 not (!) 操作与 invert (~) 操作。 not (!) 用于逻辑表达式以反转逻辑结果,而 invert (~) 用于在 0 和 1 之间翻转变量的位。 not (!) 的使用也是依赖于硬件的,所以我个人不推荐使用它。考虑使用 invert (~) 运算符的另一种方法是,它在功能上与对变量执行 exclusive-or (^) 相同反对零的赞美:~0x81 = 0x81 ^ 0xFF
【解决方案2】:

它是按位补码运算符。给定输入

010011101

返回输出:

101100010

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 2018-01-12
      • 2015-01-01
      • 2012-01-08
      相关资源
      最近更新 更多