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

原文:
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位 byte是8位 byte有负数形式 char没有 如果直接做移位 负数的byte会直接根据首位的符号位1直接扩展 变成111111111xxxxxx形式 而做位与则不会出现这个问题

巴扎黑

我理解是符号位

左手右手慢动作

进行位操作时,除long型外,其他类型会自动转成int型. don’t want sign extension 意味这不把byte首位做符合位来转char,java不存在无符号类型,char范围为-2^16-2^16-1,char为两个字节,比如byte b=-1,把首位当符号位char c=(char)b,则c二进制位(补码)表示为1111 1111 1111 1111 即-1,两个字节表示-1;如果不把首位做符号位,如char c=(char)(b&0xff),则c的二进制位(补码)表示为0000 0000 1111 1111 即255,两字字节表示255.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!