0 / 0 / 0
Регистрация: 10.10.2021
Сообщений: 15
|
||||||
1 | ||||||
Реализовать циклический сдвиг влево на указанное количество бит05.12.2022, 22:09. Показов 872. Ответов 16
Метки нет (Все метки)
Доброе время! У меня проблема. Мне необходимо реализовать циклический побитовый сдвиг влево, с маленькими числами все отлично работает, но когда ввожу максимальное число для 64 бит(9223372036854775807) то мне выдает другое число
0
|
05.12.2022, 22:09 | |
Ответы с готовыми решениями:
16
Осуществить сдвиг элементов матрицы на указанное количество позиций влево Циклический сдвиг влево элементов массива на заданное количество позиций Циклический побитовый сдвиг числа вправо на указанное количество бит, но только для нечетных битов Циклический сдвиг на 11 бит влево |
фрилансер
5843 / 5372 / 1102
Регистрация: 11.10.2019
Сообщений: 14,355
|
||||||
05.12.2022, 22:32 | 2 | |||||
Mentiorowski, чуток упростить можно
value =1100111000111100001111001100110011111111000000001111000010101010
0
|
0 / 0 / 0
Регистрация: 10.10.2021
Сообщений: 15
|
|
05.12.2022, 22:37 [ТС] | 3 |
Проблема именно в том, что когда я ввожу это максимальное число и сдвигаю на 64 бит(по кругу то есть) , он новое число переводит из двоичной в десятичной неправильно. Пример:
Input: 9223372036854775803(введеное число) 64(сдвиг влево на 64) Output: Исходное число в двоичном виде: 01111111 11111111 11111111 11111111 11111111 11111111 11111111 11111011 Сдвиг влево на число бит: 64 Результат сдвига: 01111111 11111111 11111111 11111111 11111111 11111111 11111111 11111011 Получившееся число: 9223372036854775808 То есть не соответсвует введеному мною числу, хотя именно в двоичном коде сдвиг организован верно
0
|
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
|
|
05.12.2022, 22:43 | 4 |
0
|
0 / 0 / 0
Регистрация: 10.10.2021
Сообщений: 15
|
|
05.12.2022, 23:02 [ТС] | 5 |
Но это же и есть перевод в десятиричное число, как где у меня единицы, там сумма двух степени, так же и переводит, не совсем понимаю
0
|
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
|
|
05.12.2022, 23:44 | 6 |
Функция
pow работает с типом double .У double мантисса всего 52 бита.Для получения натуральной степени двойки используй битовый сдвиг. 2n = (1ULL << n) А вместо сложения - побитовое ИЛИ.
0
|
0 / 0 / 0
Регистрация: 10.10.2021
Сообщений: 15
|
||||||
06.12.2022, 00:02 [ТС] | 7 | |||||
Я воспользовался, стал получать совсем иные значения
Исходное число в десятиричном виде: 9223372036854775903 Исходное число в двоичном виде: 10000000 00000000 00000000 00000000 00000000 00000000 00000000 01011111 Сдвиг влево на число бит: 64 Результат сдвига: 10000000 00000000 00000000 00000000 00000000 00000000 00000000 01011111 Получившееся число: 1 То есть проблема также с переводом. Я как-то неправильно реализовал?
0
|
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
|
|
06.12.2022, 00:18 | 8 |
0
|
0 / 0 / 0
Регистрация: 10.10.2021
Сообщений: 15
|
|
06.12.2022, 00:19 [ТС] | 9 |
integer
0
|
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
|
|
06.12.2022, 00:20 | 10 |
0
|
0 / 0 / 0
Регистрация: 10.10.2021
Сообщений: 15
|
|
06.12.2022, 00:20 [ТС] | 11 |
Целое число, int
0
|
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
|
|
06.12.2022, 00:22 | 12 |
0
|
0 / 0 / 0
Регистрация: 10.10.2021
Сообщений: 15
|
|
06.12.2022, 00:25 [ТС] | 13 |
А, то есть меня интересует long long? Но переменная deg же вмещает в себя значение степени, а не само число возведенную в неё
0
|
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
|
|
06.12.2022, 00:29 | 14 |
Я не знаю, что она там по твоей задумке вмещает, но справа от оператора присваивания находится именно чило
2 возведенное в степень i и имеет тип unsigned long long .
0
|
0 / 0 / 0
Регистрация: 10.10.2021
Сообщений: 15
|
||||||
06.12.2022, 00:37 [ТС] | 15 | |||||
Такая проблема возникла: я изменил тип переменной deg на long long, я все равно получаю вывод совсем рандомного содержания в десятиричном виде
0
|
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
|
|
06.12.2022, 00:41 | 16 |
Сообщение было отмечено Mentiorowski как решение
Решение
Mentiorowski, ну наверное потому, что у тебя
i отображает не степень. Почему в оригинале у тебя зависимость степени от i была такой:
А тут вдруг стала просто i ?
1
|
0 / 0 / 0
Регистрация: 10.10.2021
Сообщений: 15
|
|
06.12.2022, 00:47 [ТС] | 17 |
Благодарю за помощь!) Совсем забыл про arr_size
0
|
06.12.2022, 00:47 | |
06.12.2022, 00:47 | |
Помогаю со студенческими работами здесь
17
Циклический сдвиг списка вправо или влево на указанное число позиций Циклический сдвиг в целом числе на n бит влево и вправо Реализовать программу, которая будет выполнять циклический сдвиг списка влево Циклический сдвиг элементов массива влево на заданное количество позиций Циклический сдвиг содержимого цепочки слов на заданное количество бит вправо Логический сдвиг влево,логический сдвиг вправо,алгоритм обмена двух переменных,циклический сдвиг Сдвиг влево на один бит Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |