>  기사  >  Java  >  0xff를 사용하는 Bitwise AND는 Java에서 부호 있는 바이트를 부호 없는 정수로 어떻게 변환합니까?

0xff를 사용하는 Bitwise AND는 Java에서 부호 있는 바이트를 부호 없는 정수로 어떻게 변환합니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-02 10:02:30437검색

How Does Bitwise AND with 0xff Transform a Signed Byte into an Unsigned Integer in Java?

Java에서 값 및 0xff의 신비 공개: 부호 없는 Fun 및 바이트 승격

부호 8-로 설계된 Java의 바이트 데이터 유형 비트 유형은 때때로 프로그래머가 머리를 긁게 만들 수 있습니다. 당황스러운 코드를 생각해 보세요.

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

인쇄되면 결과가 마법처럼 254로 변환됩니다. 이 갑작스러운 정수 변환은 어떻게 발생하며 비트 & 연산자가 이 모든 것의 중심에 있는 것처럼 보이는 이유는 무엇입니까?

실제로 & 연산자 자체는 유형 변환을 유발하지 않습니다. 두 개의 정수에 대해 비트 AND 연산을 수행하는 의도된 작업을 성실하게 수행합니다. 그 비결은 Java 데이터 유형 캐스팅 규칙의 미묘한 상호 작용에 있습니다.

바이트 변수인 값이 &를 만나면 정수로 변환됩니다. 이러한 변형은 & 연산자가 정수에서만 작동해야 한다는 Java의 엄격한 요구 사항에서 비롯됩니다. 결과적으로 값은 비트 단위 체조가 시작되기 전에 조용히 int로 승격됩니다.

흥미롭게도 다른 피연산자 0xff는 본질적으로 int 리터럴입니다. 결과적으로 두 피연산자는 정수 영역에서 만족스럽게 춤을 추고 있습니다.

& 연산자는 마법을 수행하여 원래 바이트 값에서 추출된 부호 없는 8비트 값을 구현하는 새로운 정수 결과를 만듭니다. 우리의 경우 0xfe의 부호 없는 표현은 254를 생성합니다.

따라서 수수께끼의 결과 = value & 0xff는 부호 없는 8비트 값을 result라는 정수에 대한 합리적인 할당이 됩니다. 이러한 미묘한 유형 승격 동작을 이해하면 프로그래머는 Java의 다양한 데이터 유형의 복잡성을 탐색하여 코드가 캐스팅 및 비트 단위 조작의 미묘한 차이를 우아하게 처리할 수 있습니다.

위 내용은 0xff를 사용하는 Bitwise AND는 Java에서 부호 있는 바이트를 부호 없는 정수로 어떻게 변환합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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