Здравствуйте, Аноним, Вы писали:
А>Добрый день. А>как мне зделать такое. А> замените последнию единицу в битовом предствалении числа на ноль. Примечение: не конкретый бит с единицей, а последний какой встретиться в заданом числе.
unsigned int n = ...;
n &= n-1;//Сбросить младший значащий бит
Любите книгу — источник знаний (с) М.Горький
Re: замена единицу на нуль в битовом предствалении чесл
Здравствуйте, Аноним, Вы писали:
А>Добрый день. А>как мне зделать такое. А> замените последнию единицу в битовом предствалении числа на ноль. Примечение: не конкретый бит с единицей, а последний какой встретиться в заданом числе.
MM>>Пишет 0. А должно 2 по идее . B>Это смотря по какой идее
Ну вроде общепринятое понимание фразы "сбросить бит" означает "записать туда 0, не затрагивая остальные". Получается, этот код работает, только когда LSB установлен в 1, а в этом случае достаточно вычесть из него единицу.
На мой взгляд, правильнее было бы так:
unsigned int n = ...;
n &= unisgned int(-1) - 1;
А чтобы абстрагироваться от типа данных, еще и обернуть все это в шаблон.
Re[6]: замена единицу на нуль в битовом предствалении ч
Здравствуйте, Аноним, Вы писали:
А>Добрый день. А>как мне зделать такое. А> замените последнию единицу в битовом предствалении числа на ноль. Примечение: не конкретый бит с единицей, а последний какой встретиться в заданом числе.
unsigned char n;
...
n &= 0xFE; // сбросит младший бит;
замена единицу на нуль в битовом предствалении чесла.
От:
Аноним
Дата:
13.09.07 13:48
Оценка:
Добрый день.
как мне зделать такое.
замените последнию единицу в битовом предствалении числа на ноль. Примечение: не конкретый бит с единицей, а последний какой встретиться в заданом числе.
Re[3]: замена единицу на нуль в битовом предствалении ч
B>>unsigned int n = ...;
B>>n &= n-1;//Сбросить младший значащий бит
B>>
А>Вы не могли бы по подробнее обяснить эту строчку?n &= n-1
Развернутый код:
n = n & (n-1);
Комментарий: к числу применяется операция "битовое 'и'", при этом в качестве второго операнда используется разность этого же числа и единицы. Результат операции записывается в исходную переменную.
Здравствуйте, MightyMan, Вы писали:
MM>Ну вроде общепринятое понимание фразы "сбросить бит" означает "записать туда 0, не затрагивая остальные".
Именно так. Кто-то с этим спорил?
MM>Получается, этот код работает, только когда LSB установлен в 1, а в этом случае достаточно вычесть из него единицу.
Может быть нам посчастливится увидеть примеры некорректной работы?
MM>На мой взгляд, правильнее было бы так: MM>
MM>unsigned int n = ...;
MM>n &= unisgned int(-1) - 1;
MM>
На мой взгляд, это совершенно не то, о чем шла речь в исходном посте.
Предлагаю вернуться к началу:
unsigned int n = 2;
n &= n-1;
printf("%u\n", n);
MM>>>Пишет 0. А должно 2 по идее .
Мне самому написать двоичное представление числа "2", и посчитать количество установленных битов, или Вы сделаете это сами?
MM>А чтобы абстрагироваться от типа данных, еще и обернуть все это в шаблон.
Любите книгу — источник знаний (с) М.Горький
Re[6]: замена единицу на нуль в битовом предствалении ч
Здравствуйте, MightyMan, Вы писали:
MM>>>Пишет 0. А должно 2 по идее . B>>Это смотря по какой идее
MM>Ну вроде общепринятое понимание фразы "сбросить бит" означает "записать туда 0, не затрагивая остальные". Получается, этот код работает, только когда LSB установлен в 1, а в этом случае достаточно вычесть из него единицу.
MM>На мой взгляд, правильнее было бы так: MM>
MM>unsigned int n = ...;
MM>n &= unisgned int(-1) - 1;
MM>
MM>А чтобы абстрагироваться от типа данных, еще и обернуть все это в шаблон.
была задача сбросить последний установленный бит, а не самый младший
Re[2]: замена единицу на нуль в битовом предствалении ч
От:
Аноним
Дата:
13.09.07 14:51
Оценка:
Здравствуйте, Bell, Вы писали:
B>
B>unsigned int n = ...;
B>n &= n-1;//Сбросить младший значащий бит
B>
А точно этот бит последний? Может последний — старший.
Re: замена единицу на нуль в битовом предствалении чесл
Здравствуйте, Аноним, Вы писали:
А>Добрый день. А>как мне зделать такое. А> замените последнию единицу в битовом предствалении числа на ноль. Примечение: не конкретый бит с единицей, а последний какой встретиться в заданом числе.
Еще вариант:
n = ~(~n+1) & n;
Re[4]: замена единицу на нуль в битовом предствалении ч
Здравствуйте, Bell, Вы писали:
B>Комментарий: к числу применяется операция "битовое 'и'", при этом в качестве второго операнда используется разность этого же числа и единицы. Результат операции записывается в исходную переменную.
B>Пример в двоичном коде: B>
Похоже начались занятия в вузах. Кое-где уже задания дали. Правда, честно признаться, я когда прочёл вопрос не догадался как его можно эффективно решить.
Re[3]: замена единицу на нуль в битовом предствалении ч
Здравствуйте, MightyMan, Вы писали:
MM>Здравствуйте, Bell, Вы писали:
MM>
MM>unsigned int n = 2;
MM>n &= n-1;
MM>printf("%u\n", n);
MM>
MM>Пишет 0. А должно 2 по идее .
Код конечно странноват, согласен, но по идее вообще-то должен был 1 на 0 поменять, а у вас там 0 на конце Так что GIGO (garbage in — garbage out).
Re[4]: замена единицу на нуль в битовом предствалении ч