Операции над целыми типами
Операции сравнения
В языке Java шесть обычных операций сравнения целых чисел по величине:
- больше >;
- меньше <;
- больше или равно >=;
- меньше или равно <=;
- равно ==;
- не равно !=.
Сдвоенные символы записываются без пробелов, их нельзя переставлять местами, запись › будет неверной.
Результат сравнения – логическое значение: true, в результате, например, сравнения 3!= 5; или false, например, в результате сравнения 3 == 5.
Для записи сложных сравнений следует привлекать логические.операции. Например, в вычислениях часто приходится делать проверки вида а < х < b. Подобная запись на языке Java приведет к сообщению об ошибке, поскольку первое сравнение, а < х, даст true или false, a Java не знает, больше это, чем b, или меньше. В данном случае следует написать выражение (а < х) && (х < b), причем здесь скобки можно опустить, написать просто а < х && х < b, но об этом немного позднее.
Побитовые операции
Иногда приходится изменять значения отдельных битов в целых данных. Это выполняется с помощью побитовых (bitwise) операций путем наложения маски. В языке Java есть четыре побитовые операции:
- дополнение (complement) ~ (тильда);
- побитовая конъюнкция (bitwise AND) &;
- побитовая дизъюнкция (bitwise OR) |;
- побитовое исключающее ИЛИ (bitwise XOR) ^.
Они выполняются поразрядно, после того как оба операнда будут приведены к одному типу int или long, так же как и для арифметических операций, а значит, и к одной разрядности. Операции над каждой парой битов выполняются согласно табл. 1.3.
Таблица 1.3. Побитовые операции.
n1 | n2 | ~n1 | n1 & n2 | n1 | n2 | n1 ^ n2 |
---|---|---|---|---|---|
1 | 1 | 0 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 | 1 |
0 | 1 | 1 | 0 | 1 | 1 |
0 | 0 | 1 | 0 | 0 | 0 |
В нашем примере b1 == 50, двоичное представление 00110010, b2 == -99, двоичное представление 10011101. Перед операцией происходит повышение до типа int. Получаем представления из 32-х разрядов для b1-0…00110010, для b2-1…l0011101. В результате побитовых операций получаем:
- ~b2 == 98, двоичное представление 0…01100010;
- b1 & b2 == 16, двоичное представление 0…00010000;
- b1 | b2 == – 65, двоичное представление 1…10111111;
- b1 ^ b2 == – 81, двоичное представление 1…10101111.
Двоичное представление каждого результата занимает 32 бита.
Заметьте, что дополнение ~х всегда эквивалентно (-x)-1.