Байтовые операции в 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>>
Re[10]: Байтовые операции в Java
От: Денис Корявов  
Дата: 29.07.05 07:28
Оценка:
Здравствуйте, chesnokov_a, Вы писали:

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

F>>Если к этому числу применить "& 0xff", то биты, которые получились в результате преобразования типов, будут "выкинуты":
F>>0xffffff80 & 0xff = 0x80
F>>что и требовалось получить.
_>То есть при выполнении:

_>
_>int b = i & 0xFF;
_>

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

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



Вот тут посмотрите
Re: Байтовые операции в Java
От: Blazkowicz Россия  
Дата: 29.07.05 08:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>
А>int b = array[j] & 0xFF;
А>

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

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


Кстати баян.
http://rsdn.ru/Forum/Message.aspx?mid=1181163&amp;only=1
Автор: dshe
Дата: 19.05.05
Re: Байтовые операции в Java
От: Аноним  
Дата: 29.07.05 14:43
Оценка:
Здравствуйте, Аноним, Вы писали:

http://www.onjava.com/pub/a/onjava/2005/02/02/bitsets.html
Re: ArithmeticException
От: fessa  
Дата: 31.07.05 08:42
Оценка:
Z>когда Java VM бросает ArithmeticException при операциях с целыми числами?

при округлении, например. Посмотри исходники java —

java.math.BigDecimal
java.math.BigInteger
java.math.MutableBigInteger
Re[4]: Байтовые операции в Java
От: xBlackCat Россия  
Дата: 03.08.05 09:14
Оценка:
Здравствуйте, zubr, Вы писали:

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


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


Z>эм... ну и пусть 4

Z>почему
Z>
Z>    int b = array[j];
Z>

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

Z>кто то добавит ненулевые биты?

Все типы в JAva (кроме char) — знаковые. Т.е. в случае
 byte a = 0xff;
 int b = a;

получим в а значение -1 (0xFFFFFFFF).

Ну а дальше — понятно
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Rojac &mdash; Rsdn Offline JAva Client
Анонсы и обсуждение здесь
Автор: xBlackCat
Дата: 08.02.10
Re: Байтовые операции в Java
От: Passer  
Дата: 22.08.05 07:37
Оценка:
кстати подскажите пожалуйста как xor в java делать
Re[2]: Байтовые операции в Java
От: Infernal Россия  
Дата: 22.08.05 08:48
Оценка:
Здравствуйте, Passer, Вы писали:

P>кстати подскажите пожалуйста как xor в java делать


Если зайти на гугл: здесь

то найдем:
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/bitwise.html

и сделаем вывод:



Не в обиду
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.