Я новичок в этом вопросе и пытаюсь понять, как 0xFFFFFFF & 0x00000001 могут иметь одинаковый знак, а 0x0000001 и 0x12345678 - разные. Основываясь на моем понимании, шестнадцатеричные цифры, у которых самый значимый бит между 0-7, являются положительными, а 8-F - отрицательными.
Для дальнейшего контекста, вот что я пытался понять:
Вопрос: Выполните функцию C, которая выполняет операции и отвечает требованиям, указанным в комментариях.
Комментарии:
/*
* diffSign – return 1 if x and y have different signs
* Examples: diffSign(0xFFFFFFF, 0x00000001) = 0
* diffSign(0x0000001, 0x12345678) = 1
* Legal ops: & | ^ ~ << >>
* 1-byte const (0x00 to 0xFF)
*/
Ответ:
int diffSign(int x, int y) {
return ((x >> 31) & 0x1) ^ ((y >> 31) & 0x1);
}
Если возможно, я также был бы очень признателен за разъяснения о том, как & 0x1 поможет мне идентифицировать знак! Это кажется излишним, и я не слишком уверен в значении этого в уравнении.