Есть ли кто-нибудь, кто может помочь мне объяснить, в чем разница между неподписанным символом и char в операции XOR?unsigned char и char XOR operation
#include <stdio.h>
int main() {
char a[2] = { 0x56, 0xa5 }; // a[0] 0101 0110
// a[1] 1010 0101
a[0] = a[0]^a[1]; // a[0] 1111 0011 f3
printf("%02x", a[0]);
puts("");
unsigned char b[2] = { 0x56, 0xa5 }; // b[0] 0101 0110
// b[1] 1010 0101
b[0] = b[0]^b[1]; // b[0] 1111 0011 f3
printf("%02x", b[0]);
puts("");
}
результат:
fffffff3
f3
[Finished in 0.0s]
Другой пример:
#include <stdio.h>
int main() {
char a[2] = { 0x01, 0x0a };
a[0] = a[0]^a[1];
printf("%02x", a[0]);
puts("");
unsigned char b[2] = { 0x01, 0x0a };
b[0] = b[0]^b[1];
printf("%02x", b[0]);
puts("");
}
результат:
0b
0b
[Finished in 0.0s]
Неправильный тип переданного 'printf'. '% x' ожидает' unsigned', вы передаете 'int' – Olaf
@Olaf: вы правы, но передача' (unsigned int) a [0] 'будет производить тот же вывод. По-прежнему требуется объяснение. – chqrlie