Я и мой ёбаный кот на фоне ковра. Войти !bnw Сегодня Клубы

В Java 8 нет unsigned int но зато работать с int можно так так, будто это unsigned int.
Стандартный тип int может принимать значения от -2<sup>31</sup> до 2<sup>31</sup>-1.
При выходе за границы значений не выбрасываются исключения, но может возникнуть ошибка в вычислении.
Поэтому, если мы хотим работать с int как с unsigned int, мы можем продолжать использовать все те же операции с числами, и у нас не будет ошибки вычисления, если число не выходит за границы диапазона от 0 до 2<sup>32</sup>-1.

Для формирования строки, содержащей значение unsigned int, необходимо использовать статический метод Integer.toUnsignedString(int i). Также, можно использовать метод Integer.toUnsignedLong(int i) для получения правильного числа типа long.

Для того, чтобы получить unsigned int из строки содержащей число в диапазоне 0 до 2<sup>32</sup>-1 необходимо использовать статический метод Indeger.parseUnsignedInt(String s). Методы Integer.toUnsignedString(int i) и Indeger.parseUnsignedInt(String s) обращают друг друга.

Приведенный ниже код демонстрирует эти возможности.
```java
public class App {
public static void main(String[] args) {
System.out.println("== Defining and evaluating ints ==");
int i1 = 0x00;
int i2 = 0x7F_FF_FF_FF;
int i3 = 0x80_00_00_00;
int i4 = 0xFF_FF_FF_FF;
int i5 = i3 + 1;
System.out.println("i1: s " + i1 + " u " + Integer.toUnsignedString(i1));
System.out.println("i2: s " + i2 + " u " + Integer.toUnsignedString(i2));
System.out.println("i3: s " + i3 + " u " + Integer.toUnsignedString(i3));
System.out.println("i4: s " + i4 + " u " + Integer.toUnsignedString(i4));
System.out.println("i5: s " + i5 + " u " + Integer.toUnsignedString(i5));

    System.out.println("== Parsing ints ==");
    int i6 = Integer.parseUnsignedInt("0");
    int i7 = Integer.parseUnsignedInt("2147483647");
    int i8 = Integer.parseUnsignedInt("2147483648");
    int i9 = Integer.parseUnsignedInt("4294967295");
    System.out.println("i6: s " + i6 +  " u " + Integer.toUnsignedString(i6));
    System.out.println("i7: s " + i7 +  " u " + Integer.toUnsignedString(i7));
    System.out.println("i8: s " + i8 +  " u " + Integer.toUnsignedString(i8));
    System.out.println("i9: s " + i9 +  " u " + Integer.toUnsignedString(i9));

    System.out.println("== Comparing ints ==");
    boolean s12 = i1 > i2;
    boolean u12 = Integer.compareUnsigned(i1, i2) > 0;
    boolean s23 = i2 > i3;
    boolean u23 = Integer.compareUnsigned(i2, i3) > 0;
    boolean s34 = i3 > i4;
    boolean u34 = Integer.compareUnsigned(i3, i4) > 0;
    System.out.println("i1 > i2: signed: " + s12 + " unsigned: " + u12);
    System.out.println("i2 > i3: signed: " + s23 + " unsigned: " + u23);
    System.out.println("i3 > i4: signed: " + s34 + " unsigned: " + u34);
}

}

Полученный результат:

== Defining and evaluating ints ==
i1: s 0 u 0
i2: s 2147483647 u 2147483647
i3: s -2147483648 u 2147483648
i4: s -1 u 4294967295
i5: s -2147483647 u 2147483649
== Parsing ints ==
i6: s 0 u 0
i7: s 2147483647 u 2147483647
i8: s -2147483648 u 2147483648
i9: s -1 u 4294967295
== Comparing ints ==
i1 > i2: signed: false unsigned: false
i2 > i3: signed: true unsigned: false
i3 > i4: signed: false unsigned: false
```
Этот пост покрывает только часть особенностей Integer, полное описание смотри здесь: https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html

#STAG65 / @hdghg / 3345 дней назад

Бан.
#STAG65/0ZI / @l29ah / 3345 дней назад
отобрали и сломали байты // на хабрачик
#STAG65/P98 / @mugiseyebrows / 3345 дней назад
@mugiseyebrows всо норм с байтами, а вот разметка поплыла
#STAG65/K6Y / @hdghg --> #STAG65/P98 / 3345 дней назад
@hdghg сколько байт памяти занимает один инт переменной сигности? ммм?
#STAG65/Y67 / @mugiseyebrows --> #STAG65/K6Y / 3345 дней назад
#STAG65/O65 / @hdghg --> #STAG65/Y67 / 3345 дней назад
@hdghg а не пиздишь?
#STAG65/BFZ / @mugiseyebrows --> #STAG65/O65 / 3345 дней назад
@mugiseyebrows ну может 4 с половиной
#STAG65/0DI / @hdghg --> #STAG65/BFZ / 3345 дней назад
джавакостыли
#STAG65/NJ2 / @ruki / 3345 дней назад

Если человек понимает, как это работает, он эти тривиальные процедуры сам напишет, а те, кто не понимают, обязательно споткнутся на вычислениях.

#STAG65/KT0 / @ceyt / 3344 дня назад
@ceyt я понимаю как работает quick sort, но я не пишу его каждый раз когда мне нужно что-то отсортировать, чяднт?
#STAG65/99C / @hdghg --> #STAG65/KT0 / 3344 дня назад

@hdghg Тут проблема не в том, что написано, а в том, что оставлено на пользователя, который постоянно должен помнить, что вот эти вот инты у него особенные, и что с ними можно и нельзя делать.

#STAG65/XT7 / @ceyt --> #STAG65/99C / 3344 дня назад
@ceyt решается оговоренным именованием
#STAG65/10W / @hdghg --> #STAG65/XT7 / 3344 дня назад
@hdghg Уау прям как в ассемблере!
#STAG65/NHJ / @l29ah --> #STAG65/10W / 3344 дня назад
@l29ah Можно делать все то же самое что и с интами обычными, просто другой диапазон значений.
#STAG65/6Q6 / @hdghg --> #STAG65/NHJ / 3344 дня назад
@hdghg И большое число меньше маленького при сравнении, топ удобно.
#STAG65/B65 / @l29ah --> #STAG65/6Q6 / 3344 дня назад

@hdghg iasu32Num, ёпта.

#STAG65/HX4 / @ceyt --> #STAG65/10W / 3344 дня назад
@l29ah Карочи. Эту фичу нужно знать чтобы ей не пользоваться. Доволен?
#STAG65/NDH / @hdghg --> #STAG65/B65 / 3344 дня назад

@ceyt То есть наоборот.

#STAG65/8EB / @ceyt --> #STAG65/HX4 / 3344 дня назад
@hdghg Карочи ещё один способ отстрелить себе ногу из-за необоснованного убожества языка.
#STAG65/V5F / @l29ah --> #STAG65/NDH / 3344 дня назад
@l29ah нет. если ты знаешь что выйдешь за границы int, то ты знаешь выйдешьла за границы 'uint', а значит, ногу себе не отстрелишь по незнанию // а если отстрелишь то будешь знать куда копать
#STAG65/1PG / @hdghg --> #STAG65/V5F / 3344 дня назад
@ceyt хз че такое, не нагуглил
#STAG65/LXP / @hdghg --> #STAG65/8EB / 3344 дня назад

@hdghg Закажи майку «Я люблю венгерскую нотацию» и ходи в ней.

#STAG65/ZIJ / @ceyt --> #STAG65/LXP / 3344 дня назад
@ceyt я не люблю венгерсую нотацию
#STAG65/W4E / @hdghg --> #STAG65/ZIJ / 3344 дня назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.