Поддерживать положение прокрутки GridView с помощью поворота экрана

В Java, int - 32 бита. A byte равно 8 bits.

Большинство примитивных типов в Java подписаны, а byte, short, int и long закодированы в двух дополнениях. (Тип char не имеет знака, а понятие знака не применимо к boolean.)

. В этой схеме номеров наиболее значимый бит указывает знак числа. Если требуется больше бит, самый старший бит («MSB») просто копируется в новый MSB.

Итак, если у вас есть байт 255: 11111111, и вы хотите представить его как int (32 бита) вы просто копируете 1 влево 24 раза.

Теперь один из способов прочитать номер дополнения отрицательного двора - начать с младшего значащего бита, двигаться влево, пока не найдете первый 1, а затем инвертировать каждый бит впоследствии. Полученное число является положительной версией этого числа

Например: 11111111 переходит к 00000001 = -1. Это означает, что Java будет отображаться как значение.

То, что вы, вероятно, хотите сделать, это знать значение unsigned байта.

Вы можете выполнить это с помощью битовой маски, которая удаляет все, кроме наименее значимые 8 бит. (0xff)

Итак:

byte signedByte = -1;
int unsignedByte = signedByte & (0xff);

System.out.println("Signed: " + signedByte + " Unsigned: " + unsignedByte);

Будет распечатан: "Signed: -1 Unsigned: 255"

Что на самом деле происходит здесь?

Мы используем побитовое И, чтобы замаскировать все посторонние знаковые биты (1 слева от наименее значимых 8 бит.) Когда int преобразуется в байт, Java прерывает левую часть, большинство 24 бит

1111111111111111111111111010101
&
0000000000000000000000001111111
=
0000000000000000000000001010101

Поскольку 32-й бит теперь является битом знака вместо 8-го бита (и мы установили бит знака равным 0, который является положительным), считываются исходные 8 бит из байта Java как положительное значение.

13
задан Matthew Runo 23 December 2011 в 19:13
поделиться