Здравствуйте, Wermut, Вы писали:
W>Здравствуйте, Demon, Вы писали:
D>>Здравствуйте, Wermut, Вы писали:
W>>>Как за 2 операции сбросить младший значащий бит в байте?
D>>
D>> BYTE b;
D>> b = (b-1) & b;
D>>
W>Младший значащий бит — это самый младший бит из всех не равных нулю, так что ваш пример не подходит для b == 2;
Из 2 (00000010) должно получиться 0 (00000000). Так?
b = 2; // b == 2 (00000010)
b1 = b - 1; // b1 == 1 (00000001)
b = b1 & b; // b == 0 (00000010 & 00000001 == 00000000)
Здравствуйте, Wermut, Вы писали:
W>Младший значащий бит — это самый младший бит из всех не равных нулю, так что ваш пример не подходит для b == 2;
Почему не подходит: (2-1)&1 = 0, все верно
Это решение верно всегда
Пусть двоичная форма числа имеет вид
a = xx...xx100...0
после отнимания единички:
a — 1 = xx...xx011...1
Это следует из элементарного отнимания столбиком
соответственно a&(a — 1) даст только xx...xx000...0
Здравствуйте, Demon, Вы писали:
D>Здравствуйте, Wermut, Вы писали:
W>>Здравствуйте, Demon, Вы писали:
D>>>Здравствуйте, Wermut, Вы писали:
W>>>>Как за 2 операции сбросить младший значащий бит в байте?
D>>>
D>>> BYTE b;
D>>> b = (b-1) & b;
D>>>
W>>Младший значащий бит — это самый младший бит из всех не равных нулю, так что ваш пример не подходит для b == 2;
D>Из 2 (00000010) должно получиться 0 (00000000). Так?
D>
D> b = 2; // b == 2 (00000010)
D> b1 = b - 1; // b1 == 1 (00000001)
D> b = b1 & b; // b == 0 (00000010 & 00000001 == 00000000)
D>
Здравствуйте, komaz, Вы писали:
K>Здравствуйте, Wermut, Вы писали:
W>>Младший значащий бит — это самый младший бит из всех не равных нулю, так что ваш пример не подходит для b == 2; K>Почему не подходит: (2-1)&1 = 0, все верно
Здравствуйте, ilnar, Вы писали:
I>Здравствуйте, Plague, Вы писали:
P>>Здравствуйте, Wermut, Вы писали:
W>>>Как за 2 операции сбросить младший значащий бит в байте?
P>>
Здравствуйте, Socrat, Вы писали:
S>Здравствуйте, komaz, Вы писали:
K>>Здравствуйте, Wermut, Вы писали:
W>>>Младший значащий бит — это самый младший бит из всех не равных нулю, так что ваш пример не подходит для b == 2; K>>Почему не подходит: (2-1)&1 = 0, все верно
S>2 = 10 S>2-1 = 01 S>(2-1)&1 = 01
S>
Очевидно же что описка
maq>Неверно — этот код сбросит не младщий значащий бит, а просто младший.
Бред. Откуда это вы выкопали такое значение слова "значащий"?
Ответ ilnar-а соврешенно верен — такой код действительно сбрасывает младший значащий бит байта. Который в традиционных целочисленных представлениях всегда является просто сладшим битом байта.
Автора задачи по видимому хотел сбросить младший ненулевой бит. Тогда так и надо было говрить.