ATP>1. Складываю 28 битные целые (четверка бит в запасе есть) ATP>4. Суммирую не несколько значений в один аккамулятор, а много (НАПРИМЕР также как с случае с увеличением яркости). ATP>5. Граница должна задаваться в виде 2^N но не включительно, тоесть в случае 2^16 последнее число должно быть 65535
Здравствуйте, Ranger_XL, Вы писали:
ATP>>1. Складываю 28 битные целые (четверка бит в запасе есть) ATP>>4. Суммирую не несколько значений в один аккамулятор, а много (НАПРИМЕР также как с случае с увеличением яркости). ATP>>5. Граница должна задаваться в виде 2^N но не включительно, тоесть в случае 2^16 последнее число должно быть 65535
R_X>или я чего-то не понимаю, или это тривиально:
R_X>int32 mask = 0x0FFFFFFF; R_X>int32 result = (data + num) & mask;
Limit == 255 (0xFF)
Надо: 255 + 2 == 255
Твой вариант: 255 + 2 == 1 == a + b (mod 256)
new RSDN@Home(1.1.4, 303) << new Message(); std::head::ear << "SCOOTER — No Fate";
Здравствуйте, AcidTheProgrammer, Вы писали:
К>>Берём 255+2 = 257 = 1'0000'0010'b.
ATP>Ну всетаки 257 — это 100000001b
Да... маразм не дремлет... конечно же, 100000001.
К>>Значащая часть: S = (x+y)&(highbit-1) = 1'0000'0010'b & 0'1111'1111'b = 0'0000'0010'b. К>>Бит переполнения: C = (x+y)&highbit = 1'0000'0000'b.
ATP>Тут все понятно
К>>Делаем из него маску: M = C-1 = 1'0000'0000'b — 1 = 0'1111'1111'b.
ATP>А вот ту можно поподробней... если С == 0, то C — 1 == -1 == 111111111.....11111
См выше про маразм.
Маску можно сделать хитрым способом:
Получим значение бита переноса: c = C>>height = 0 или 1
далее маску можно вытягивать из простой 2-элементной таблицы { 0, highbit-1 }
или рожать с помощью хитрой формулы (http://www.rsdn.ru/Forum/?mid=1220781
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, AcidTheProgrammer, Вы писали:
К>>>Берём 255+2 = 257 = 1'0000'0010'b.
ATP>>Ну всетаки 257 — это 100000001b
К>Да... маразм не дремлет... конечно же, 100000001.
К>>>Значащая часть: S = (x+y)&(highbit-1) = 1'0000'0010'b & 0'1111'1111'b = 0'0000'0010'b. К>>>Бит переполнения: C = (x+y)&highbit = 1'0000'0000'b.
ATP>>Тут все понятно
К>>>Делаем из него маску: M = C-1 = 1'0000'0000'b — 1 = 0'1111'1111'b.
ATP>>А вот ту можно поподробней... если С == 0, то C — 1 == -1 == 111111111.....11111
К>См выше про маразм.
К>Маску можно сделать хитрым способом: К>Получим значение бита переноса: c = C>>height = 0 или 1 К>далее маску можно вытягивать из простой 2-элементной таблицы { 0, highbit-1 } К>или рожать с помощью хитрой формулы (http://www.rsdn.ru/Forum/?mid=1220781