您似乎认为变量a 和b 是由二进制值初始化的。然而这些
1101011
1010101
是十进制整数文字。
如果您想使用二进制文字并且您的编译器支持它们,那么您应该编写
int a = 0b1101011;
int b = 0b1010101;
否则,您可以使用十进制整数文字,但您必须对它们应用适合十进制值的操作,以获得看起来像二进制值的新十进制值。
另外,XNOR 操作看起来像二进制按位与运算符。
下面有一个演示程序,展示了如何获得所需的结果。
#include <iostream>
std::ostream & binary( int x, std::ostream &os = std::cout )
{
if ( x ) binary( ( unsigned int )x >> 1 );
os << ( x & 1 );
return os;
}
int main()
{
int a = 0b1101011;
int b = 0b1010101;
int res = a & b;
binary( a ) << std::endl;
std::cout << "XNOR" << std::endl;
binary( b ) << std::endl;
std::cout << "========" << std::endl;
binary( res ) << std::endl;
return 0;
}
程序输出是
01101011
XNOR
01010101
========
01000001
如果你想处理二进制值的十进制表示,那么你可以为 XNOR 操作编写一个单独的函数,例如
#include <iostream>
int xnor( unsigned int a, unsigned int b )
{
const unsigned int Base = 10;
unsigned int n = 1;
unsigned int res = 0;
while ( a and b )
{
res = res + n * ( a % Base and b % Base );
n *= Base;
a /= Base;
b /= Base;
}
return res;
}
int main()
{
unsigned int a = 1101011;
unsigned int b = 1010101;
int res = xnor( a, b );
std::cout << a << std::endl;
std::cout << "XNOR" << std::endl;
std::cout << b << std::endl;
std::cout << "========" << std::endl;
std::cout << res << std::endl;
return 0;
}
程序输出是
1101011
XNOR
1010101
========
1000001
考虑到你的方法在任何情况下都是错误的。
这个表达式
res = ~(a ^ b);
如果两个变量a 和b 的最高有效位等于0,则将其设置为1。所以对于正数,你总是会得到一个负数,因为符号位将被设置为1。