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 (в обоих случаях), во втором до. Почему этот код работает по разному?