byte没有位操作吗?为什么我值是不对的?

孤尽JavaSea 2009-10-09 09:31:37
byte d = 1;
byte e = (byte) (d | 10000000);
我觉得e 应该是 -1 .
可结果是-127.
对于位操作我还是比较生疏。
...全文
126 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
东北小妞 2009-10-10
  • 打赏
  • 举报
回复
byte d = 1;
short e = (short)(d | 10000000);
System.out.print(e);
结果为:-27007
byte d = 1;
int e = (int)(d | 10000000);
System.out.print(e);
结果为:10000001
2楼应该是正确的
Dan1980 2009-10-09
  • 打赏
  • 举报
回复
看过很多想当然的程序,楼主的为其中之最也~
huangqibing0626 2009-10-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 java_gannbare 的回复:]
10000000 对应的二进制应该是100110001001011010000000
可不可能是这样!!!
[/Quote]

貌似你什么也没说!
justinavril 2009-10-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 java_gannbare 的回复:]
10000000 对应的二进制应该是100110001001011010000000
可不可能是这样!!!
[/Quote]
什么意思 我没明白...
孤尽JavaSea 2009-10-09
  • 打赏
  • 举报
回复
10000000 对应的二进制应该是100110001001011010000000
可不可能是这样!!!
steel1985 2009-10-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 justinavril 的回复:]
感觉应该是这样的:
10000000 对应的二进制应该是100110001001011010000000,而1的就是0001,都省略前面无所谓的0了,然后两者或运算,得到100110001001011010000001,然后截取后8位,也就是10000001。第一位是符号位,是1也就是负数,所以是补码表示的,所以各位取反(符号位不变),再加1,也就是-127了。
[/Quote]

有道理
justinavril 2009-10-09
  • 打赏
  • 举报
回复
感觉应该是这样的:
10000000 对应的二进制应该是100110001001011010000000,而1的就是0001,都省略前面无所谓的0了,然后两者或运算,得到100110001001011010000001,然后截取后8位,也就是10000001。第一位是符号位,是1也就是负数,所以是补码表示的,所以各位取反(符号位不变),再加1,也就是-127了。
老紫竹 2009-10-09
  • 打赏
  • 举报
回复
-1 应该是
FF
也就是
11111111

老张-AI 2009-10-09
  • 打赏
  • 举报
回复
呵呵 学习了
网络咖啡 2009-10-09
  • 打赏
  • 举报
回复
JAVA不支持代码直接写二进制的,如果想达到你的效果,写16进制的数字
byte d = 1;
byte e = (byte) (d | 10000000);
修改成:
byte d = 1;
byte e = (byte) (d | 0x80);

并且二进制编码为10000001的数值也不是-1,因为负数在程序中以补码形式存放,关于计算补码和源码的方法可以看我BLOG中《Java编程那些事儿》中关于二进制部分的讲述。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧