Арифметические действия с разными типами данных.
- Войдите на сайт для отправки комментариев
Чт, 23/03/2017 - 12:53
Какой тип данных получится, если произвести такое арифметическое действие:
Val_1=micros()-Val_2;
Где Val_1 была объявлена как "int", а Val_2 была объявлена как "unsigned long"
Интересут тип данных полученного результата.
Какой тип данных получится, если произвести такое арифметическое действие:
Val_1=micros()-Val_2;
Где Val_1 была объявлена как "int", а Val_2 была объявлена как "unsigned long"
Интересут тип данных полученного результата.
Что Вы понимаете под "полученным результатом". Здесь у Вас две операции: вычитание и присваивание, которые выполняются именно в таком порядке (сначала вычитание, потом присваивание).
Результат какой из этих двух операций Вас интересует?
Если было в такой последовательности: Присваивание, потом вычитание. Меняется ли тип Val_1
после вычитания?
Этой фразу я не понял. Последовательность операций я Вам написал.
С какого перепугу? Если переменная описана каким-то типом, то поменять это невозможно (не в этом языке).
Меняется ли тип Val_1
после вычитания?
Вы тупой или учебник программирования в шлоле выменяли на порножурнал?
Тип Val_1 Вы же сами описали как int, КАК ОН МОЖЕТ МЕНЯТЬСЯ??????
--------------------
Правила преобразования типов: (по памяти, не стал гуглить, уж простите, но это "таблица умножения"):
при арифметических операциях тип операнда преобразуется к "большему"
char->int->long->float->double. Знаковый к беззнаковому. Есть тонкости, которые вам точно не нужны, просто не поймете.
При присваивании, если возможно, значение сохраняется, если нет - обрезаестя лишнее.
В Вашем случае - обрезается 2 старших байта у ulong, Остается два байта. Они будут интерпретированы, в соотвтетствии с типом переменной:
если беззнаковое - то правильно, если знаковое, то число, большее 32767, будет интерпретироваться, как отрицательное.
Спасибо! Я об этом и спрашивал. В широко растиражированной инструкции http://arduino.ua/ru/prog/Arithmetic это в явной форме не утверждается.
В широко растиражированной инструкции http://arduino.ua/ru/prog/Arithmetic это в явной форме не утверждается.
Так надо читать широко растиражированные учебники С и С++. Там это утверждается в явном виде.