A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© zhouxp3323 黑马帝   /  2012-4-3 16:30  /  2197 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

byte b = -3; 将b转换为int类型时,为何会是进行 int i = b&xxff 操作呢

5 个回复

正序浏览
&FF 感觉像是单纯的字节扩容。

byte 占一个字节。   存 -3 的二进制表现形式是1111-1101
int    占四个字节。  普通赋值或者强转  都会自动根据符号位填充0 or 1 所以转换结果为1111-1111 1111-1111 1111-1111 1111-1101
而进行&FF操作就是 最低8位(一个字节)不变 前面24位都强制扩充为0。   0xff默认是int型的 也就是0000-0000 0000-0000 0000-0000 1111-1111

具体为啥要这么搞,应该是有一定应用的,试情景而定吧。
回复 使用道具 举报
&FF 感觉像是单纯的字节扩容。

byte 占一个字节。   存 -3 的二进制表现形式是1111-1101
int    占四个字节。  普通赋值或者强转  都会自动根据符号位填充0 or 1 所以转换结果为1111-1111 1111-1111 1111-1111 1111-1101
而进行&FF操作就是 最低8位(一个字节)不变 前面24位都强制扩充为0。   0xff默认是int型的 也就是0000-0000 0000-0000 0000-0000 1111-1111

具体为啥要这么搞,应该是有一定应用的,试情景而定吧。
回复 使用道具 举报
&0xFF 其实就是取二进制的最低8位
byte是8位么
回复 使用道具 举报
public class TestTreeSet {
  public static void main(String[] args) {
        byte b=-1;
        int a=b;
        String c=Integer.toBinaryString(a);
        System.out.println(c);
}
}
输出11111111111111111111111111111111
public class TestTreeSet {
  public static void main(String[] args) {
        byte b=-1;
        int a=b&255;
        String c=Integer.toBinaryString(a);
        System.out.println(c);
}
}
输出11111111
在byte类型转向int型是前三字节补1
加上&255前三字节补0
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马