应对两个整数值(1101011 XNOR 1010101)执行XNOR操作,并应返回1000001。
int a = 1101011;
int b = 1010101;
int res = 0;
res = ~(a ^ b);
cout << res;
输出:-2073959。
我对编程非常陌生,对于我出错的地方的任何帮助都将不胜感激。
答案 0 :(得分:1)
您认为1101011
和10101010
是十进制值时出错了。事实上,它们是二进制的。
AFAIK,C ++不支持二进制赋值;如果是这样,您通常会使用01101011
或01101011b
来表明这一点。因为它没有,你需要将它们视为十六进制来最容易地处理它们。
01101011 = 0x6b
10101010 = 0xaa
如果您在代码中使用这些值(换句话说,int a = 0x6b
等),然后重复您的操作,您将正确执行操作。当前打印结果的方式,它将以十进制打印,然后必须转换为二进制(如果需要),尽管有人提供了注释以帮助您将输出转换为十六进制。 / p>
答案 1 :(得分:0)
您似乎假设变量a
和b
由二进制值初始化。不过这些
1101011
1010101
是十进制整数文字。
如果你想使用二进制文字并且编译器支持它们,那么你应该写
int a = 0b1101011;
int b = 0b1010101;
否则,您可以使用十进制整数文字,但必须对它们应用适合于十进制值的操作,以获得看起来像二进制值的新十进制值。
似乎操作XNOR
看起来像二进制按位AND运算符。
下面是一个示范程序,展示了如何获得所需的rtesult。
#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);
如果对于变量1
和0
等于a
,则将最高有效位设置为b
。因此,对于正数,您将始终得到负数,因为符号位将设置为1
。
答案 2 :(得分:0)
我认为你的问题是你想要这样做:
1101011 ^
1010101
-------
= 0111110
0111110 ~
-------
= 1000001
你实际上是这样做的:
00000000000100001100110011010011 ^ // int 1101011
00000000000011110110100110110101 // int 1010101
--------------------------------
= 00000000000111111010010101100110 // int 2073958
00000000000111111010010101100110 ~ // int 2073958
--------------------------------
= 11111111111000000101101010011001 // int -2073959
所以而不是:
#include <iostream>
int main()
{
int a = 1101011;
int b = 1010101;
int res = 0;
int ans = 0;
ans = (a ^ b);
res = ~ans;
std::cout << a << '\n';
std::cout << b << '\n';
std::cout << ans << '\n';
std::cout << res << '\n';
}
使用#include <bitset>
#include <iostream>
#include <bitset>
int main()
{
int a = 107;
int b = 85;
int res = 0;
int ans = 0;
ans = (a ^ b);
res = ~ans;
std::cout << std::bitset<7>(a) << '\n';
std::cout << std::bitset<7>(b) << '\n';
std::cout << std::bitset<7>(res) << '\n';
std::cout << std::bitset<7>(res) << '\n';
}