|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.11.2017, 13:50 | #1 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 155
|
Си, побитовые операции.
Функция setbits(x, p , n, y) которая возвращает x, в котором n битов, начиная с позиции p, равный n крайним правым битам аргумента y, а остальные не трогать.
Например: set(x, 5, 4, y) x = 1 0 1 0 1 1 0 1 y = 1 1 0 1 0 1 1 1 рез 1 0 0 1 1 1 0 1 Код:
если пробуем переписать так: Код:
|
04.11.2017, 14:24 | #2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Потому что выводите вы его как знаковый. Прочитайте про спецификаторы принтфа.
|
04.11.2017, 14:52 | #3 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 155
|
По книги я еще не знаю никаких спецификаторов кроме %d, %c, %f0x, %x, %s думаю проблема не тут. Я тут проверял каждый сдвиг сначала влево потом направо, оказывается биты сохраняются и при последующем сдвиге обратно они возвращаются, я то думал что все 0 должны быть ну или все 1. Тут алгоритм мой неправильный получается, тогда как он возвращает нужное число только с отрицательным знаком? Путаницы тут хватает.
|
04.11.2017, 16:23 | #4 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
Есть 2 вида сдвига. Круговой через перенос и как вы говорите. В С++ НЕ круговой, т.е. если сдвинуть 8битное целое на 8 - будет ноль.
Круговые нужно городить отдельно, например так: Код:
А вообще перепроверьте 2 момента: 1. Все числа там int (знаковые), т.о. битовые операции над ними дадут знак тоже. 2. Порядок операций. Сдвиги лучше все в скобочки явно расставлять всегда. У них самый низкий приоритет. Последний раз редактировалось alexzk; 04.11.2017 в 16:35. |
04.11.2017, 16:33 | #5 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
дел
|
04.11.2017, 17:26 | #6 | |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 155
|
Цитата:
Я пришел к выводу что если переносить то только в одну сторону до конца |
|
04.11.2017, 21:14 | #7 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Побитовые операции | Ilai | Помощь студентам | 2 | 26.04.2015 17:38 |
Побитовые операции | alexusankov | C# (си шарп) | 6 | 01.12.2013 22:38 |
Побитовые операции С++ | Pein95 | Общие вопросы C/C++ | 3 | 19.11.2012 14:48 |
побитовые операции | serega28 | Паскаль, Turbo Pascal, PascalABC.NET | 11 | 25.01.2011 14:02 |
побитовые операции | Dimarik | Общие вопросы C/C++ | 7 | 16.04.2010 19:27 |