| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Работа с битами в long числах |
| Автор: Voyager 12.3.2008, 18:22 | ||
| Необходимо сделать методы, корректно устанавливающие, получающие биты в long числах. Пока сделал вариант:
Но с long числами при больших значениях битов (<64) наблюдаются глюки, т.к. число становится отрицательным (знаковый 31-й бит все портит). |
| Автор: Voyager 13.3.2008, 02:25 | ||||
| Придумал такой вариант, может кому пригодится. Первый вариант:
Второй:
|
| Автор: Ctrl 16.3.2008, 12:22 | ||||
| Извините за пост в закрытую тему, но наличие бага в исходном примере автора привело к неверным выводам: - знаковый бит не 31-й, а 63-й - на самом деле проблема рещается гораздо проще (см. мой пример) Теперь о баге:
Баг в том что не учитывается неявный кастинг выражения (1<<Bit) к типу int, ну и кроме того значение Bit может быть недопустимым (>63). CodeFix: (1<<Bit) заменить на (0x1L <<(Bit & 0x3F)) Вот тестовый пример:
|