![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#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 Код:
если пробуем переписать так: Код:
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,724
|
![]()
Потому что выводите вы его как знаковый. Прочитайте про спецификаторы принтфа.
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 155
|
![]()
По книги я еще не знаю никаких спецификаторов кроме %d, %c, %f0x, %x, %s думаю проблема не тут. Я тут проверял каждый сдвиг сначала влево потом направо, оказывается биты сохраняются и при последующем сдвиге обратно они возвращаются, я то думал что все 0 должны быть ну или все 1. Тут алгоритм мой неправильный получается, тогда как он возвращает нужное число только с отрицательным знаком? Путаницы тут хватает.
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
![]()
Есть 2 вида сдвига. Круговой через перенос и как вы говорите. В С++ НЕ круговой, т.е. если сдвинуть 8битное целое на 8 - будет ноль.
Круговые нужно городить отдельно, например так: Код:
А вообще перепроверьте 2 момента: 1. Все числа там int (знаковые), т.о. битовые операции над ними дадут знак тоже. 2. Порядок операций. Сдвиги лучше все в скобочки явно расставлять всегда. У них самый низкий приоритет. Последний раз редактировалось alexzk; 04.11.2017 в 16:35. |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
![]()
дел
|
![]() |
![]() |
![]() |
#6 | |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 155
|
![]() Цитата:
Я пришел к выводу что если переносить то только в одну сторону до конца |
|
![]() |
![]() |
![]() |
#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 |