Java에서 부호없는 바이트로 작업하기위한 전체 안내서 :
(이 답변의 출처.)
Java 언어는 unsigned
키워드 와 같은 것을 제공하지 않습니다 . byte
언어 사양에 따른 -128 사이의 값을 나타냅니다 - 예를 들어 127, A는 경우 byte
에 캐스팅 int
부호 및 사용과 같은 첫 번째 비트 해석합니다 자바 부호 확장을 .
즉, byte
단순히 8 비트로 볼 수 없으며 그 비트를 0에서 255 사이의 값으로 해석 할 수 없습니다. 다른 사람의 방법에 대해 해석을 강요하기 위해 할 수있는 것은 없습니다. 메소드가 a를 승인하면 byte
, 달리 명시되지 않는 한 해당 메소드는 -128에서 127 사이의 값을 승인합니다.
다음은 사용자 편의를위한 유용한 변환 / 조작 몇 가지입니다.
int로 /에서 변환
// From int to unsigned byte
int i = 200; // some value between 0 and 255
byte b = (byte) i; // 8 bits representing that value
// From unsigned byte to int
byte b = 123; // 8 bits representing a value between 0 and 255
int i = b & 0xFF; // an int representing the same value
또는 Java 8 이상인 경우을 사용하십시오 Byte.toUnsignedInt
.
파싱 / 포맷
가장 좋은 방법은 위의 전환을 사용하는 것입니다.
// Parse an unsigned byte
byte b = (byte) Integer.parseInt("200");
// Print an unsigned byte
System.out.println("Value of my unsigned byte: " + (b & 0xFF));
산술
2의 보수 표현은 덧셈, 뺄셈 및 곱셈에 대해 "그냥 작동합니다":
// two unsigned bytes
byte b1 = (byte) 200;
byte b2 = (byte) 15;
byte sum = (byte) (b1 + b2); // 215
byte diff = (byte) (b1 - b2); // 185
byte prod = (byte) (b2 * b2); // 225
Division은 피연산자를 수동으로 변환해야합니다.
byte ratio = (byte) ((b1 & 0xFF) / (b2 & 0xFF));