Я ищу устаревший встроенный проект с компилятором C30 из микрочипа для 16-битного MCU. Существует ожидаемый случай, когда индекс обходит вокруг 0xFF, который, как я думал, будет определяться по-умолчанию. Однако следующий код всегда сбрасывает меня в //sad :(
, когда я ожидаю, что закончится счастливым.C unsigned char непредвиденное поведение при перекрытии
unsigned char index = 0xFF;
unsigned char check = 0x02;
if(check == index +3){
//happy!
}else{
//sad :(
}
Теперь, если я специально бросил его в unsigned char
:
unsigned char index = 0xFF;
unsigned char check = 0x02;
if(check == (unsigned char) index +3){
//happy!
}else{
//sad :(
}
Он работает и я в конечном итоге в //happy!
Так что я пропустил? Это просто зависимое от компилятора поведение?
Попробуйте '(unsigned char) (index + 3)'. Я оставлю вопрос _why_ в качестве вспомогательной задачи для вас. И обратите внимание, что второй пример также должен ** не работать **. – Olaf
Привет, Олаф, я попытался показать это в моем втором примере. Я просто не знаю, почему это сработало. Я получаю, что он переполняется, но я ожидаю, что он переполнится до 0x02. – confused
Время, чтобы узнать, используя отладчик. Или просто взгляните на код Ассемблера, это отличный стартер. – Olaf