我最近在代码中看到了上面的运算符,我用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) 比较无符号值时,如此测试:
if (pos == (size_t)-1)
Run Code Online (Sandbox Code Playgroud)
这种比较在技术上是否与以下类似:
if (pos == (size_t)~0)
Run Code Online (Sandbox Code Playgroud)
我不习惯第二种变体.这就是我问这个问题的原因.如果是的话,答案可能会相当直截了当.
我使用-1作为返回类型为size_t(无符号类型)的函数的标志值.
我一开始并没有注意到它,特别是因为它没有导致我的代码中的任何错误(我用x == -1,而不是x <0来检查它).
是否有任何微妙的原因我不应该留下它?什么时候这可能出乎意料?这是常用的吗?
ptrdiff_t不太常见,输入时间较长,而且无论如何它都不是合适的类型,因为函数会将索引返回到数组中.