>Java >java지도 시간 >`value`가 부호 있는 바이트임에도 불구하고 `value & 0xff`가 Java에서 부호 없는 값을 생성하는 이유는 무엇입니까?

`value`가 부호 있는 바이트임에도 불구하고 `value & 0xff`가 Java에서 부호 없는 값을 생성하는 이유는 무엇입니까?

DDD
DDD원래의
2024-11-02 02:45:02620검색

Why does `value & 0xff` produce an unsigned value in Java, even though `value` is a signed byte?

Java에서 값 및 0xff를 사용한 비트별 조작

이 Java 코드 조각에서:

<code class="java">byte value = 0xfe; // corresponds to -2 (signed) and 254 (unsigned)
int result = value & 0xff;</code>

질문이 제기됩니다. : value와 0xff 사이의 비트 AND 연산(&)이 예상대로 -2(부호 있음) 대신 254(부호 없음) 결과를 생성하는 이유는 무엇입니까?

C와 달리 byte는 Java에서 부호 있는 유형입니다. 비트별 조작 없이 int에 값을 할당하면 부호 있는 값 -2가 됩니다. 그러나 0xff와 함께 &를 사용하면 의도한 부호 없는 값을 얻을 수 있습니다.

여기서 핵심은 &가 int 값에서 작동한다는 것입니다. 값(바이트)이 &와 함께 사용되면 먼저 int로 승격됩니다. 마찬가지로 0xff는 int 리터럴입니다. 그러면 & 연산은 결과의 최하위 8비트에 배치된 값에서 8비트 이진 값을 생성합니다.

이 예에서는

  • 값이 -2로 승격됩니다(11111110 이진수)
  • 0xff는 255(이진수로 11111111)를 나타냅니다.
  • value & 0xff는 254(이진수로 11111110)

이 비트 단위 조작이 일반적으로 사용됩니다. 특히 낮은 수준의 프로그래밍이나 데이터 조작 시나리오에서 특정 비트를 추출하거나 값의 부호 없는 특성을 유지하는 데 사용됩니다.

위 내용은 `value`가 부호 있는 바이트임에도 불구하고 `value & 0xff`가 Java에서 부호 없는 값을 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.