加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

& 0xFF 与 & 0xFF00 的作用

(2012-01-09 16:04:23)
标签:

杂谈

分类: 生活就是不停的战斗

byte--->char代码是这样的:
c[i] = (char) (b[i] & 0xff) (b[i]为byte型,c[i]为char型)
觉得与一下0xff没什么用。直接c[i] = (char)b[i]有何异?

如: ((WORD)((((WORD)(wData) >> 8) & 0xff) | (((WORD)(wData) << 8) & 0xff00)))

char c = (char)-1 & 0xFF;
char d = (char)-1;
System.out.println((
int)c);
System.out.println((
int)d);

这样输出是

255
65535


上面代码就是为了避免错误

补充一下:
1)。位运算符只针对4byte的int型
2)。-2的byte类型 16进制表示为 FE(2取反加1)
3)。-2 & 0xFF运算: 实际-2带符合bit-wise成int,即FE会变成FFFFFFFE(2取反加1), 接着
0xFFFFFFFE & 0x000000FF = 0x 000000FE; 如果不&,就是FFFFFFFE。

1) 位运算不限制为int, long也行的。
2)
3) 负数进行&操作时需要转成补码,-2 的补码是0xFFFFFFFE

因为byte的取值范围是 -128~127,而Char是0~65535

所以需要& 0xFF 使得byte原来的负值变成正的

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有

char代码是这样的: c[i] = (char) (b[i] & 0xff) (b[i]为byte型,c[i]为char型) 觉得与一下0xff没什... (来自 @头条博客)"}); -->