23:43
if x and 1=1 then...
Студентам об'ясняю разные вещи, а сам на них иногда ловлюсь. Например -- если не уверены в приоритете операций, ставьте на всякий случай скобки.
Сегодня.
У меня было несколько кольцевых буферов размером, скажем, 16 элементов. С общим указателем на начало. Как мне обратиться к заданному элементу с индексом index?
base[x*BUF_SIZE+index], где x -- номер буфера.
А к следующему?
base[x*BUF_SIZE+(index+1)%BUF_SIZE], видимо.
Но у меня контроллер, считать остаток от деления -- это очень долго. А элементов 16. Лучше я тогда сделаю (index+1)&0x0F. Получается:
base[x*BUF_SIZE+(index+1)&(BUF_SIZE-1)]
Хм... что-то не работает.
ОКАЗАЛОСЬ, у побитового И приоритет НИЖЕ, чем у сложения и, тем более, умножения, т.е. я вычислял следующее:
base[(x*BUF_SIZE+(index+1))&(BUF_SIZE-1)]
Сегодня.
У меня было несколько кольцевых буферов размером, скажем, 16 элементов. С общим указателем на начало. Как мне обратиться к заданному элементу с индексом index?
base[x*BUF_SIZE+index], где x -- номер буфера.
А к следующему?
base[x*BUF_SIZE+(index+1)%BUF_SIZE], видимо.
Но у меня контроллер, считать остаток от деления -- это очень долго. А элементов 16. Лучше я тогда сделаю (index+1)&0x0F. Получается:
base[x*BUF_SIZE+(index+1)&(BUF_SIZE-1)]
Хм... что-то не работает.
ОКАЗАЛОСЬ, у побитового И приоритет НИЖЕ, чем у сложения и, тем более, умножения, т.е. я вычислял следующее:
base[(x*BUF_SIZE+(index+1))&(BUF_SIZE-1)]