《Java puzzlers》里关于 sign extension 的示例
PHP中文网
PHP中文网 2017-04-18 09:45:37
0
3
474

原文:
If you are converting from a byte value b to a char and you don’t want sign
extension, you must use a bit mask to suppress it. This is a common idiom, so no
comment is necessary:

char c = (char) (b & 0xff);

没有get到 sign extension的含义!以及为什么这么做就没有sign extension

PHP中文网
PHP中文网

认证0级讲师

모든 응답(3)
黄舟

먼저 char은 16비트 바이트이고 8비트 바이트는 음수 형식을 갖습니다. 음수 바이트를 직접 이동하면 첫 번째 부호 비트에 따라 직접 확장됩니다. 1이 111111111xxxxxx가 됩니다. 비트 AND를 하면 이 문제가 발생하지 않습니다.

巴扎黑

기호 비트인 것으로 알고 있습니다

左手右手慢动作

비트 연산을 수행할 때 long 유형을 제외하고 다른 유형은 자동으로 int 유형으로 변환됩니다. 부호 확장을 원하지 않는다는 것은 char로 변환하기 위해 비트의 첫 번째 비트를 사용하지 않는다는 의미입니다. Java에는 부호 없는 유형이 없으며 char 범위는 -2^16-2^16-1이고 char는 2바이트입니다(예: 바이트 b=-1). 첫 번째 비트는 부호 비트 char c=로 사용됩니다. (char)b인 경우 c 이진 비트(보수)는 1111 1111 1111 1111로 표현됩니다. 즉, char c=(char와 같이 첫 번째 비트가 부호 비트로 사용되지 않으면 2바이트는 -1을 나타냅니다. )(b&0xff), c의 이진 비트(보수)는 0000 0000 1111 1111로 표현됩니다. 즉 255, 두 문자 바이트는 255를 나타냅니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!