Задать вопрос
@zompin

Почему этот код работает по разному?

unsigned short crc16(unsigned char ch) {
	unsigned short crc = 0xffff;
	unsigned short poly = 0x1021;
	char i;
	crc ^= ch << 8;
	for (i = 0; i < 8; i++) {
		if (crc & 0x8000) {
			crc <<= 1;
			crc ^= 0x1021;
		} else {
			crc <<= 1;
		}
	}
	return crc;
}

unsigned short crc16(unsigned char ch) {
	unsigned short crc = 0xffff;
	unsigned short poly = 0x1021;
	char i;
	crc ^= ch << 8;
	for (i = 0; i < 8; i++) {
		crc <<= 1;
		if (crc & 0x8000) {
			crc ^= 0x1021;
		}
	}
	return crc;
}

Два варианта кода. В первом случае битовый сдвиг производится в блоке if (в обоих случаях), во втором до. Почему этот код работает по разному?
  • Вопрос задан
  • 189 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@iv_k
странный вопрос. это и должно работать по разному. в первом случае у вас условие до сдвига, во втором после сдвига.
Ответ написан
Комментировать
@zompin Автор вопроса
Дошло. В первом случае идет просто сравнение, во втором сравнение результата сдвига.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы