《Java puzzlers》里关于 sign extension 的示例
博彩导航大全
博彩导航大全
当前位置 : 博彩导航大全 > 博彩导航网站

《Java puzzlers》里关于 sign extension 的示例

原文:
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

首先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=charb&0xff,则c的二进制位(补码)表示为0000 0000 1111 1111 即255,两字字节表示255.

栏目列表

广告位

博彩导航大全