我最近在代码中看到了上面的运算符,我用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) 如果我想翻转一些,我想知道哪种方式更好.我应该使用它XOR 0xffffffff还是使用它~?
我担心在某些情况下我可能需要以这些方式中的一种方式将位填充到末端而不是另一种方式,这将使另一种方式更安全.我想知道是否有时候使用一个而不是另一个.
下面是一些在同一输入值上使用两者的代码,输出值始终相同.
#include <iostream>
#include <iomanip>
void flipBits(unsigned long value)
{
const unsigned long ORIGINAL_VALUE = value;
std::cout << "Original value:" << std::setw(19) << std::hex << value << std::endl;
value ^= 0xffffffff;
std::cout << "Value after XOR:" << std::setw(18) << std::hex << value << std::endl;
value = ORIGINAL_VALUE;
value = ~value;
std::cout << "Value after bit negation: " << std::setw(8) << std::hex << value << std::endl << std::endl;
}
int main()
{
flipBits(0x12345678);
flipBits(0x11223344); …Run Code Online (Sandbox Code Playgroud) 3位最多可容纳7(4 + 2 + 1).我正在尝试使用按位运算来计算它.
3 is 0b011
~3 is 0b100
Run Code Online (Sandbox Code Playgroud)
做一个按位或我希望0b111(即7).相反,我得到了
int result = (~3) | 3;
printf("%i\n", result);
Run Code Online (Sandbox Code Playgroud)
-1
我究竟做错了什么?