Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
FeasantMortem
3 / 3 / 2
Регистрация: 21.04.2014
Сообщений: 34
1

Побитовый сдвиг

22.11.2014, 19:59. Просмотров 915. Ответов 6
Метки нет (Все метки)

К примеру:
Java
1
2
3
4
int x = 15250;
 
int shift = x >> 4;
int reverse = shift << 4;
Тут остаток отбрасывается, из-за этого на выходе получается 15248, вместо начального числа.

Выход из положения нашел в следующем:
Java
1
2
3
4
int x = 15250;
 
double shift = x / 16.;
double reverse = shift * 16.;
Число преобразовывается как надо, но это не то решение, что я хотел бы, подскажите, как по-другому решить проблему?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2014, 19:59
Ответы с готовыми решениями:

Разбираю Унарное отрицание (побитовый оператор ~)
Привет всем. есть код : for (int i = -10; i &lt;= 10; i++){...

Побитовый сдвиг
Здравствуйте! Столкнулся с операторами &gt;&gt; &lt;&lt; &gt;&gt;&gt;, конкретно мне нужно понять...

Побитовый сдвиг. Как получается ответ?
Добавлено через 3 минуты Извиняюсь за, возможно, тупой вопрос &quot;Для...

Циклический сдвиг
Здравствуйте. Программа преобразует число в двоичную систему и выводит на...

Сдвиг мартицы
Что-то совсем мозги не варят, лето наверное влияет:cry:, но все же, есть...

6
turbanoff
Эксперт Java
4019 / 3754 / 742
Регистрация: 18.05.2010
Сообщений: 9,329
Записей в блоге: 11
Завершенные тесты: 1
22.11.2014, 20:43 2
FeasantMortem, вы не сказали, чего вы хотите получить?
0
FeasantMortem
3 / 3 / 2
Регистрация: 21.04.2014
Сообщений: 34
22.11.2014, 20:53  [ТС] 3
Исходное число 15250.
При сдвиге вправо на 4 и затем влево на 4, это число становится 15248, как я и писал ранее, из-за отбрасывания остатка, возможно ли получить исходное число, не прибегая к смене типа переменных?
0
Севак
любитель покушать
682 / 634 / 248
Регистрация: 25.09.2011
Сообщений: 1,313
22.11.2014, 21:51 4
FeasantMortem, а что вы хотели получить? при сдвиге вправо крайние 4 бита обнулились, соответственно, при сдвиге обратно, они из воздуха не возникнут
Java
1
2
3
4
5
6
7
8
9
10
public class Test {
    public static void main(String[] args) {
        int x = 15250;
        System.out.println("До сдвига:\t" + Integer.toBinaryString(x));
        x >>= 4;
        System.out.println("После сдвига вправо:" + Integer.toBinaryString(x));
        x <<= 4;
        System.out.println("После сдвига влево: " + Integer.toBinaryString(x));
    }
}
0
FeasantMortem
3 / 3 / 2
Регистрация: 21.04.2014
Сообщений: 34
22.11.2014, 23:19  [ТС] 5
Поэтому у меня и возник вопрос, возможно ли избежать этого, не прибегая к смене типа?
0
turbanoff
Эксперт Java
4019 / 3754 / 742
Регистрация: 18.05.2010
Сообщений: 9,329
Записей в блоге: 11
Завершенные тесты: 1
23.11.2014, 00:08 6
FeasantMortem, если вам надо исходное число - так и берите сразу его. Не понимаю...
Если вы делаете побитовый сдвиг, то вы выкидываете биты. И, разумеется, их никак не вернуть, только если заранее не запомнить.
0
FeasantMortem
3 / 3 / 2
Регистрация: 21.04.2014
Сообщений: 34
23.11.2014, 13:12  [ТС] 7
turbanoff, исходное число не возможно использовать, есть карта для которой преобразовывается число, пределы координат на ней в 16 раз меньше исходного, после того как на карте просчитывается путь от одной точки к другой, координаты нужно перевести к обратной размерности
0
23.11.2014, 13:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2014, 13:12

Сдвиг символов в строк
Помогите написать метод который будет все символы кроме букв и цифр сдвигать...

Циклический сдвиг текста
Нужно сдвинуть текст циклически 30 раз, и подсчитать количество совпадений....

Сдвиг массива влево
Подскажите, что делаю не так. Массив сдвигается, но вместо правых элементов,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru