C++ 异或运算符C++;

C++ 异或运算符C++;,c++,encryption,xor,C++,Encryption,Xor,这里有一个简单的问题。XOR运算符(^)有问题。我可以对整数进行XOR运算,得到正确的结果;但是,当XOR两个字符时,不会返回任何内容: int main() { char a = 'a'; char b = 'b'; char c; c = a^b; cout << c << endl; } intmain(){ 字符a='a'; 字符b='b'; 字符c; c=a^b; 因为'a'^'b'的结果是一个不可打印的字符,即'\3

这里有一个简单的问题。XOR运算符(^)有问题。我可以对整数进行XOR运算,得到正确的结果;但是,当XOR两个字符时,不会返回任何内容:

int main() {
    char a = 'a';
    char b = 'b';
    char c;

    c = a^b;
    cout << c << endl;
}
intmain(){
字符a='a';
字符b='b';
字符c;
c=a^b;

因为
'a'^'b'
的结果是一个不可打印的字符,即
'\3'
'a'^'b'
0x61^0x62
)导致
3
,这是一个不可打印的字符,
ETX
,因此无法打印。

<

#include <iostream>
#include <iomanip>

int main() {
    char a = 'a';
    char b = 'b';
    char c;

    c = a^b;
    std::cout << std::hex << static_cast<int>(c) << std::endl;
}
#包括
#包括
int main(){
字符a='a';
字符b='b';
字符c;
c=a^b;

std::cout
std::ostream::operator您正在获取输出,您只是看不到它。该操作的结果是
1
,低于32左右的ASCII值是“不可打印的”。一个表示数据的结束,一个是新行,一个是回车,一个是哔哔声……请看(我懒得回答好,其他人回答)Just
std::cout小提示:如果您使用的是UNIX/Linux,将输出管道化到
cat-vt
有助于查看不可打印的字符,因为它们被替换为可见的符号(在本例中为“^C”)。
std::cout-Yep。这应该教会我在发布之前进行编译和测试:“'static_-cast(C)”和刚才的“(int)C”或“int(C)”有什么区别“?@DavidHunt:
static\u cast
会进行一些检查,以确保转换或多或少是安全的,例如-您不能意外地将
const t*
指针投射到
t*
(您必须使用
const\u cast
),或者从
int*
double*
(您需要
重新解释
)。
char a = 'a'; // 'a' == 0x61
char b = 'b'; // 'b' == 0x62
char c = a ^ b; // 0x61 ^ 0x62 == 0x03
std::cout << static_cast<int>(c) << std::endl;