10 / 4 / 3
Регистрация: 29.01.2016
Сообщений: 131
|
||||||
1 | ||||||
Побитовые операции29.10.2017, 21:09. Показов 592. Ответов 6
Метки нет (Все метки)
Задача:
Функция 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
((~0 << n) >> 8-p+1) Или задачку можно решить более тривиально?
0
|
29.10.2017, 21:09 | |
Ответы с готовыми решениями:
6
Побитовые операции Побитовые операции Побитовые операции Побитовые операции |
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|
29.10.2017, 22:44 | 2 |
Использовать unsigned для всех параметров.
1
|
29.10.2017, 23:30 | 3 |
Вместо "0" пиши "0u", чтобы он был беззнакового типа. В этом случае сдвиг вправо будет старшие биты заполнять нулями
Добавлено через 37 секунд Ну или вместо "~0" написать "(unsigned)(~0)". Сути дела не меняет, просто выбери то, что проще читается
1
|
10 / 4 / 3
Регистрация: 29.01.2016
Сообщений: 131
|
||||||
30.10.2017, 11:20 [ТС] | 4 | |||||
likehood, Evg,
Круто, чем дальше тем больше мне Си начинает нравиться. Добавлено через 9 минут Посмотрел я потом в книге ответов, там алгоритм, точнее последовательность такая:
0
|
Велосипедист...
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
|
|
30.10.2017, 19:08 | 5 |
EpicSR, я для себя...
Вообще ничего не понял. То бишь, мы берем первые 4 бита, начиная с 5-го по счету переменной y , после чего копируем эти биты в x . Но куда? В какое место копируем? "Всерединку"?
0
|
10 / 4 / 3
Регистрация: 29.01.2016
Сообщений: 131
|
|
30.10.2017, 23:31 [ТС] | 7 |
В моем примере мы берем первые 4(параметр n = 4) бита числа y (выделил которые берем) y = 1 1 0 1 0 1 1 1, потом эти биты вставляем в число x начиная с 5(параметр p = 5) разряда числа,
получается вместо голубых x = 1 0 1 0 1 1 0 1 Итого у нас есть два числа выбранные по выше описанному алгоритму: y = 1 1 0 1 0 1 1 1 x = 1 0 1 0 1 1 0 1 Мы должны возвратить число в котором вместо голубых битов вставлены оранжевые, а остальные черные биты числа x не трогать. Результат = 1 0 0 1 1 1 0 1 Напоминаю что разряды начинаются с хвоста числа и первый разряд нумеруются с 0. И так до 7 если число одно байтовое, в одном байте 8 битов как правило. x = [7]1 [6]0 [5]1 [4]0 [3]1 [2]1 [1]0 [0]1 - в квадратных скобках номер разряда числа, потом само значение.
0
|
30.10.2017, 23:31 | |
30.10.2017, 23:31 | |
Помогаю со студенческими работами здесь
7
Побитовые операции с float Побитовые операции, основы Задача на побитовые операции Побитовые операции - разобрать пример Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |