#1 2018-06-10 20:16:21

Selen
Учасник
Зареєстрований: 2017-01-02
Повідомлень: 88

мега 2650 переменная декларирована как long а считает как int

Приветствую,

из за чего такое может быть, декларирую переменую unixZeitOnline как long для временни юникс, а считает програма ее как интеджер т.е правильно до 32767. в тоже же время друга переменная unixZeit тоже как long работает правильно.
image

image2

мне нужно посчитать из нормального времени , секунды от начало суток.

Неактивний

#2 2018-06-10 20:29:44

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: мега 2650 переменная декларирована как long а считает как int

Для С это нормально, читайте стандарты. Пишите 3600L, 60L и все заработает.

Неактивний

#3 2018-06-10 20:32:06

Selen
Учасник
Зареєстрований: 2017-01-02
Повідомлень: 88

Re: мега 2650 переменная декларирована как long а считает как int

Вячеслав Азаров пише:

Для С это нормально, читайте стандарты. Пишите 3600L, 60L и все заработает.

Спасибо большое, точно заработало!!!

Неактивний

#4 2018-06-10 21:04:45

Olej
Учасник
З Харьков
Зареєстрований: 2018-03-08
Повідомлень: 234

Re: мега 2650 переменная декларирована как long а считает как int

Вячеслав Азаров пише:

Для С это нормально, читайте стандарты. Пишите 3600L, 60L и все заработает.

Более того, это не вопросы конкретно C, а многих языков со статической типизацией: если вы в промежуточных операциях (stundenOnlain * 3600 и т.д.) используете операнды типа byte, то и результат будет того же типа, и усекается до byte, или до int как минимальной единицы хранения целочисленных значений, в зависимости от архитектуры.

Резюме: не экономьте без нужды на размерах типов данных объявляемых переменных.

Неактивний

#5 2018-06-10 22:26:21

Selen
Учасник
Зареєстрований: 2017-01-02
Повідомлень: 88

Re: мега 2650 переменная декларирована как long а считает как int

Olej пише:
Вячеслав Азаров пише:

Для С это нормально, читайте стандарты. Пишите 3600L, 60L и все заработает.

Более того, это не вопросы конкретно C, а многих языков со статической типизацией: если вы в промежуточных операциях (stundenOnlain * 3600 и т.д.) используете операнды типа byte, то и результат будет того же типа, и усекается до byte, или до int как минимальной единицы хранения целочисленных значений, в зависимости от архитектуры.

Резюме: не экономьте без нужды на размерах типов данных объявляемых переменных.

спасибо, буду знать.

Неактивний

#6 2018-06-10 22:55:28

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: мега 2650 переменная декларирована как long а считает как int

Selen пише:

спасибо, буду знать.

В С, результат арифметических вычислений приводится к самому длинному типу из правой стороны выражениия. Тип переменной в левой сторне, почему-то, не учитывается. Однако при попытке присвоить короткой переменной длинную, генерируется сообщение об ошибке или предупреждение. Странно, но так есть, и это стандарт. Это свойственно только С, например Паскаль делает вывод типов правильно.

https://forum.arduino.ua/viewtopic.php?pid=25608#p25608

Неактивний

#7 2018-06-10 23:22:28

Olej
Учасник
З Харьков
Зареєстрований: 2018-03-08
Повідомлень: 234

Re: мега 2650 переменная декларирована как long а считает как int

Selen пише:

спасибо, буду знать.

Там где есть сомнения - приводите явно типы операндов, и не будет у вас никаких проблем.

Неактивний

#8 2018-06-11 20:56:33

Kaka
Учасник
Зареєстрований: 2018-03-21
Повідомлень: 411

Re: мега 2650 переменная декларирована как long а считает как int

Olej пише:

если вы в промежуточных операциях (stundenOnlain * 3600 и т.д.) используете операнды типа byte, то и результат будет того же типа, и усекается до byte, или до int как минимальной единицы хранения целочисленных значений, в зависимости от архитектуры.

Т.е. если в операции сложения участвуют две переменные: одна long, а другая int - результат будет int? Это не бред?

Неактивний

#9 2018-06-11 21:33:59

Olej
Учасник
З Харьков
Зареєстрований: 2018-03-08
Повідомлень: 234

Re: мега 2650 переменная декларирована как long а считает как int

Kaka пише:
Olej пише:

если вы в промежуточных операциях (stundenOnlain * 3600 и т.д.) используете операнды типа byte, то и результат будет того же типа, и усекается до byte, или до int как минимальной единицы хранения целочисленных значений, в зависимости от архитектуры.

Т.е. если в операции сложения участвуют две переменные: одна long, а другая int - результат будет int? Это не бред?

Ты в операции: stundenOnlain * 3600 - где-то видишь и long и int?
Разуй глаза, придурок.
lol

Анжэла, ви носите очки!
Подумают шо умная...

Неактивний

#10 2018-06-12 01:41:00

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: мега 2650 переменная декларирована как long а считает как int

Olej, (del)
почему так долго пропадали?  ваш юмор уже и подзабыть успели )

Остання редакція NoName (2018-06-12 23:52:58)

Неактивний

#11 2018-06-12 09:57:41

Kaka
Учасник
Зареєстрований: 2018-03-21
Повідомлень: 411

Re: мега 2650 переменная декларирована как long а считает как int

Olej, тебе задали вопрос и попросили на него ответить. Ответ опровергает бред, который ты нёс. Похоже, это дошло даже до такого неуча. как ты. Отсюда хамство. Я правильно понял ситуацию?

Неактивний

#12 2018-06-12 18:11:23

leons
Гість

Re: мега 2650 переменная декларирована как long а считает как int

тоже заметил что есть тут контенгент , который непонятно что с себя корчит потому что програмисты , отвечять не нужно это не вопрос

#13 2018-06-12 22:26:49

Olej
Учасник
З Харьков
Зареєстрований: 2018-03-08
Повідомлень: 234

Re: мега 2650 переменная декларирована как long а считает как int

leons пише:

есть тут контенгент

возьми "Букварь" big_smile

Надпись над писуаром в общественном туалете:
- Мужчина, не льстите себе - подойдите ближе.

smile

Остання редакція Olej (2018-06-12 22:28:08)

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму