arduino bitshift left (<<)
- Войдите на сайт для отправки комментариев
Ср, 10/07/2013 - 16:13
Всем привет:
Сталкунлся с косяком.
кусок кода:
for (i=0;i<=31;i++)
{
Serial.print(1<<i, BIN);
Serial.println();
}
вывод:
1
10
100
1000
10000
100000
1000000
10000000
100000000
1000000000
10000000000
100000000000
1000000000000
10000000000000
100000000000000
11111111111111111000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
хотя написано:
variable - (byte, int, long) number_of_bits integer <= 32
т.е. получается после смещения 1 на 15 и более влево результат 0.
Кто нибудь сталкивался с такой проблеммой? как можно ее решить?
Заранее спасибо.
Спасибо. неожиданно....:)
Магическое число 15 вам ни о чем не говорит?
Если нет, то попробуйте вот так:
Serial.print((long int)1<<i, BIN);
ЗЫ: Упс, опередили...
Спасибо. неожиданно....:)
Вполне себе ожиданно - микроконтроллеры AVR оперируют в основном байтами и словами. Компиляторы тоже под эти размеры заточены. Хотите большего - применяйте к ним политику кнута, в качестве которого может выступать и приведение типов.
Еще раз всем спасибо...я бы еще долго ломал голову..
сначала думал косяк print-а, потом компилятора... вот как бывает когда переносишь код с 32 битного контроллера на 8 битный....