我最近在代码中看到了上面的运算符,我用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;
}
答案 0 :(得分:66)
C ++中的~
运算符(以及其他类C语言,如C和Java)执行bitwise NOT operation - 操作数中的所有1位都设置为0,并且所有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
的{{3}}和i
执行按位NOT,然后将结果分配给ch
。
按位NOT运算符有一个有趣的属性,当应用于bitwise XOR表示的数字时,它会更改数字的符号,然后减去一个(如上例所示)。
您可能希望熟悉two's complement,因为很难在搜索引擎上搜索运营商。更好的是,您可以获得the different operators of the C++ language,它将告诉您有关C ++运算符的信息。
答案 1 :(得分:16)
〜运算符反转所有位。因此10000001
变为01111110
。
答案 2 :(得分:11)
它是按位补码运算符。鉴于输入
010011101
返回输出:
101100010