Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Оператор >>>  [new]
redwhite90
Member

Откуда:
Сообщений: 1901
Вот такой вот код приводит
		System.out.println(Long.toBinaryString(-1));
		System.out.println((Long.toBinaryString(-1 >>> 1)));
		System.out.println((Long.toBinaryString(-1 >>> 2)));
		System.out.println((Long.toBinaryString(-1 >>> 3)));
		System.out.println((Long.toBinaryString(-1 << 1)));
		System.out.println((Long.toBinaryString(-1 << 2)));

к следующему выводу:

автор
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111
111111111111111111111111111111
11111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111110
1111111111111111111111111111111111111111111111111111111111111100


Поведение последних двух строк понятно.
Разница второй и третьей, третьей и четвертой тоже понятно.
а вот как из первой получается вторая совсем не понятно

Объясните, пожалуйста.
2 янв 19, 17:40    [21777630]     Ответить | Цитировать Сообщить модератору
 Re: Оператор >>>  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3247
redwhite90
Объясните, пожалуйста.
хочется long - нужно букву L дописывать.
2 янв 19, 17:49    [21777631]     Ответить | Цитировать Сообщить модератору
 Re: Оператор >>>  [new]
alex55555
Member

Откуда:
Сообщений: 2129
redwhite90
Поведение последних двух строк понятно.

Было бы понятно, вопросов бы не возникло.

Автору копать так - разобрать подробно, какие типы и в каких операциях участвуют. Далее понять, чем отличается >> от >>>, далее прокручивать в мозгах последовательность операций до тех пор, пока результат не сойдётся с логом программы.
2 янв 19, 18:05    [21777637]     Ответить | Цитировать Сообщить модератору
 Re: Оператор >>>  [new]
redwhite90
Member

Откуда:
Сообщений: 1901
Есть 2 типа людей

как Андрей Панфилов - помог и объяснил - спасибо.

А есть как alex55555
2 янв 19, 18:12    [21777640]     Ответить | Цитировать Сообщить модератору
 Re: Оператор >>>  [new]
redwhite90
Member

Откуда:
Сообщений: 1901
хотя всё же непонятно почему сдвиг интежера влево возвращает 64 бита
2 янв 19, 18:18    [21777644]     Ответить | Цитировать Сообщить модератору
 Re: Оператор >>>  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3247
redwhite90
хотя всё же непонятно почему сдвиг интежера влево возвращает 64 бита
не возвращает. В вашем коде "-1 >>> 1" даже не вычисляется в рантайме - это константа в байткоде 2147483647L, если вы напишите метод, чтобы сделать -1 "динамическим", то получите Widening Primitive Conversion
3 янв 19, 06:31    [21777785]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить