Имеем код
Код
uint32_t a = 320 * 240;
Компилятор будет трактовать операнды 320 и 240 как имеющие тип int? Результат будет зависеть от разрядности int(16/32), правильно я понимаю?
И вообще, когда говорят "16ти битный компилятор" имеют ввиду именно разрядность int?
На C2000 int 16ти битный и a получается == 11264, хотя на самом деле должно быть 76800.
А что,если так?
Код
uint32_t a = (uint32_t)320 * 240;
чё получим?
или так
Код
uint32_t a = 320 * (uint32_t)240;
ну так то понятно, что всё будет OK
Код
uint32_t a = (uint32_t)320 * (uint32_t)240;
Сбивает ещё то, что в какой-то книге довелось прочитать, что тип будет взят от первого операнда... потом на форуме видел, что такие вещи компилятор трактует как имеющие стандартный тип(есть вообще такое понятие?).
Копнуть ISO/IEC 9899:1999 пытался, но без привычки это достаточно сложно....
Тему поднял потому, что как-бы о портируемости думать тоже нужно, а с этим типом int и его длиной бывают приколы, как я понял....
The truth is out there...