Байтовые операции в Java
От: Аноним  
Дата: 28.07.05 17:09
Оценка:
В RandomGUID(ftp://javaexchange.com/javaexchange/RandomGUID.tar)
есть следующие:

...
            byte[] array = md5.digest();
            StringBuffer sb = new StringBuffer();
            for (int j = 0; j < array.length; ++j) {
                int b = array[j] & 0xFF;
...


непонимаю какой смысл в:

int b = array[j] & 0xFF;

моя голова говорит мне что это равносильно:

int b = array[j];
Re: Байтовые операции в Java
От: aefimov Россия
Дата: 28.07.05 17:11
Оценка:
Здравствуйте, Аноним, Вы писали:

А>моя голова говорит мне что это равносильно:


А>
А>int b = array[j];
А>


int — 2 байта
Re[2]: Байтовые операции в Java
От: aefimov Россия
Дата: 28.07.05 17:12
Оценка:
Здравствуйте, aefimov, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


А>>моя голова говорит мне что это равносильно:


А>>
А>>int b = array[j];
А>>


A>int — 2 байта


Тьфу, четыре всмысле
Re[3]: Байтовые операции в Java
От: zubr Россия  
Дата: 28.07.05 17:17
Оценка:
Здравствуйте, aefimov, Вы писали:

A>Тьфу, четыре всмысле


эм... ну и пусть 4
почему
    int b = array[j];

не то же самое что и
    int b = array[j] & 0xFF;

кто то добавит ненулевые биты?
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[2]: Байтовые операции в Java
От: chesnokov_a  
Дата: 28.07.05 17:26
Оценка:
Здравствуйте, aefimov, Вы писали:
А>>
А>>int b = array[j];
А>>


A>int — 2 байта


Мои рассуждения:
byte[] array = md5.digest(); // Массив из Байтов(8 битов)
далее:
int b = array[j] & 0xFF // например 10101010 & 11111111 = 10101010
Ни чего не миняется и это результат ззперемещается в облась памяти(2а или 4и байта)...
Ну и что?
Re[3]: Байтовые операции в Java
От: fefelov Россия  
Дата: 28.07.05 17:39
Оценка:
Здравствуйте, chesnokov_a, Вы писали:

_>Ну и что?


Преобразование типов посмотрите. И о знаковом бите почитайте.

Примерчик:

public class A {

  public static void main(String[] args) {

    byte b = (byte) 128;
    int i = b;
    System.out.println(i);
    System.out.println(Integer.toHexString(i));

  }

}
Re[4]: Байтовые операции в Java
От: fefelov Россия  
Дата: 28.07.05 17:41
Оценка: 3 (1)
Здравствуйте, fefelov, Вы писали:

F>Примерчик:


А потом замените строчку:
int i = b;

на строчку:
int i = b & 0xff;


И сравните результаты. Вот так...
Re[4]: Байтовые операции в Java
От: chesnokov_a  
Дата: 28.07.05 17:46
Оценка:
Здравствуйте, fefelov, Вы писали:
F>Преобразование типов посмотрите. И о знаковом бите почитайте.

F>Примерчик:


F>
public class A {

F>  public static void main(String[] args) {

F>    byte b = (byte) 128;
F>    int i = b;
F>    System.out.println(i);
F>    System.out.println(Integer.toHexString(i));

F>  }

F>}

Потрисающе!!!
Пойду читать...
Re[5]: Байтовые операции в Java
От: chesnokov_a  
Дата: 28.07.05 17:47
Оценка:
Здравствуйте, fefelov, Вы писали:

F>Здравствуйте, fefelov, Вы писали:


F>>Примерчик:


F>А потом замените строчку:

F>
int i = b;

F>на строчку:
F>
int i = b & 0xff;


F>И сравните результаты. Вот так...

Да. Так пробовал результат разный...
Re[6]: Байтовые операции в Java
От: fefelov Россия  
Дата: 28.07.05 17:49
Оценка:
Здравствуйте, chesnokov_a, Вы писали:

_>Да. Так пробовал результат разный...


Ну так это — ответ. Учите теорию.
Re[7]: Байтовые операции в Java
От: chesnokov_a  
Дата: 28.07.05 17:58
Оценка:
Здравствуйте, fefelov, Вы писали:

F>Ну так это — ответ. Учите теорию.

И Всетаки что происходит про побайтовом "И" с маской "FF"
Re[8]: Байтовые операции в Java
От: chesnokov_a  
Дата: 28.07.05 18:01
Оценка:
Здравствуйте, chesnokov_a, Вы писали:

_>Здравствуйте, fefelov, Вы писали:


F>>Ну так это — ответ. Учите теорию.

_>И Всетаки что происходит про побайтовом "И" с маской "FF"
Простите опечатался побитовом "И" конечно же
Re[8]: Байтовые операции в Java
От: fefelov Россия  
Дата: 28.07.05 18:04
Оценка:
Здравствуйте, chesnokov_a, Вы писали:

_>И Всетаки что происходит про побайтовом "И" с маской "FF"


Приведенная выше тестовая программка выдавала:

ffffff80


Если к этому числу применить "& 0xff", то биты, которые получились в результате преобразования типов, будут "выкинуты":
0xffffff80 & 0xff = 0x80
что и требовалось получить.
Re[9]: Байтовые операции в Java
От: chesnokov_a  
Дата: 28.07.05 18:20
Оценка:
Здравствуйте, fefelov, Вы писали:
F>Если к этому числу применить "& 0xff", то биты, которые получились в результате преобразования типов, будут "выкинуты":
F>0xffffff80 & 0xff = 0x80
F>что и требовалось получить.
То есть при выполнении:

int b = i & 0xFF;

Первым делом происходит преобразование i к типу integer,
где он и преобретает дополнительные 3и бита,
затем мы обнуляем эти 3и бита маской FF — через которую проходит только младший бит
и затем мы присваиваем получившееся значение b.
Я правельно понял?

Почему так "некорректно" происходит преобразование типа byte к integer?
Re[10]: Байтовые операции в Java
От: fefelov Россия  
Дата: 28.07.05 18:25
Оценка:
Здравствуйте, chesnokov_a, Вы писали:

_>Почему так "некорректно" происходит преобразование типа byte к integer?


Почему же некорректно? Все происходит в соответствии с Java Language Specification.
Прочтите, наконец, ее или что-нибудь более популярное, например Эккеля или Вязовика.
Re[11]: Байтовые операции в Java
От: fefelov Россия  
Дата: 28.07.05 18:32
Оценка:
Здравствуйте, fefelov, Вы писали:

F>Прочтите, наконец, ее или что-нибудь более популярное, например Эккеля или Вязовика.


Даааа. Забыл...

Эккель — http://www.mindview.net/Books/TIJ/
Вязовик — http://www.intuit.ru/department/pl/javapl/
Re[10]: Байтовые операции в Java
От: fefelov Россия  
Дата: 28.07.05 18:37
Оценка:
Здравствуйте, chesnokov_a, Вы писали:

_>где он и преобретает дополнительные 3и бита,

_>затем мы обнуляем эти 3и бита маской FF — через которую проходит только младший бит

Я вижу, вы биты с байтами путаете. Нехорошо это. Неправильно.
ArithmeticException
От: zubr Россия  
Дата: 28.07.05 18:48
Оценка:
может глупый вопросик.

когда Java VM бросает ArithmeticException при операциях с целыми числами?

попробовал сделать переполнение в long-е — все нормально!
только при делении на 0. Вот.

P.S.: ПЛЗ, не надо меня посылать к java lang spec.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[12]: Байтовые операции в Java
От: chesnokov_a  
Дата: 28.07.05 18:55
Оценка:
Здравствуйте, fefelov, Вы писали:

F>Эккель — http://www.mindview.net/Books/TIJ/

F>Вязовик — http://www.intuit.ru/department/pl/javapl/

Первая книга у меня есть, правда не помню какое издание,
прочитал ее от корки до корки, и что то в памяти не отллжилось
ни чего касательно темы...может быть не придал значения...
Перечитаю.
Re[13]: Байтовые операции в Java
От: zubr Россия  
Дата: 28.07.05 19:02
Оценка:
Здравствуйте, chesnokov_a, Вы писали:

_>Первая книга у меня есть, правда не помню какое издание,

_>прочитал ее от корки до корки, и что то в памяти не отллжилось
_>ни чего касательно темы...может быть не придал значения...
_>Перечитаю.

я нашел правда в java lang spec 3.0 chapter 5 — Conversions and Promotions. скачать можно всегда с Java Sun
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.