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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

15黑马币
如题所示。求答

最佳答案

查看完整内容

b&255 (0000 0000 0000 0000 0000 0000) 1111 1111 0000 0000 0000 0000 0000 0001 1111 1111 -->255 b与上255的时候,有如上的过程,btye和int运算,byte会自动转换为int类型,前面补上一堆0,然后0&1=0 所以结果是1111 1111 与原来的byte的-1 的结果1111 1111 byte值一样,但是代表的值不一样 因为一个是int类型 一个是byte类型的,btye类型的1111 1111是-1 而int类型的1111 1111 是255 所以从-1变成了正数 ...

13 个回复

倒序浏览
b&255 (0000 0000  0000 0000  0000 0000) 1111 1111          0000 0000  0000 0000  0000 0001  1111 1111  -->255 b与上255的时候,有如上的过程,btye和int运算,byte会自动转换为int类型,前面补上一堆0,然后0&1=0  所以结果是1111 1111  与原来的byte的-1  的结果1111  1111  byte值一样,但是代表的值不一样  因为一个是int类型 一个是byte类型的,btye类型的1111 1111是-1  而int类型的1111 1111 是255  所以从-1变成了正数
回复 使用道具 举报
这里与是位运算符&

0的二进制是11111111 11111111 11111111 11111111 ,255的二进制是00000000 00000000 00000000 ‭11111111‬,在位运算中0代表false,1代表true,通过计算二进制依旧是00000000 00000000 00000000 ‭11111111,所以结果为255,依旧是正数‬
回复 使用道具 举报
byte 类型的取值范围 -128~127占1个字节,byte -1 二进制为10000001
255为int类型占4个字节,二进制为 00000000 00000000 00000000 11111111
二者相与时byte 类型提升为int 类型00000000 00000000 00000000 10000001
相与后的结果为00000000 00000000 00000000 10000001故为正数129
        
回复 使用道具 举报
因为有正数和负数,正数是前127,负数是128到255。
回复 使用道具 举报
byte 是一个字节,-1的二进制位补码是11111110 , 255是int类型数据,有4个字节,二进制数为00000000  00000000  00000000 01111111.   运算是byte自动提升为int类型所以前面要加三个字节,如下:
   00000000  0000000 00000000  11111111
&00000000  0000000 00000000  01111111
   00000000  0000000 00000000  01111111 = 255。有0则0,两个为1就是1。所以结果是255.
回复 使用道具 举报
计算机都是以二进制的补码存储的,超过了范围的默认转换为int类型的四个字节,然后再截取最后一个字节的二进制进行换算,具体的实现楼下已经说了
回复 使用道具 举报
byte类型与int型运算存在类型提升,会将byte类型提升,也就是高位补0,将一个字节扩充到4个字节,也就是00000000 00000000 00000000 11111111 高位由1变成0了,所以就由负数-1变成了正数255.这个等你学到字符流读取的时候,就会发现这样处理带来的好处。
回复 使用道具 举报
很多人都说出了正解  版主为什么不宣布已解决???
回复 使用道具 举报
自动类型提升
回复 使用道具 举报
我来解释一下吧,附运算全过程。
1:或运算是用补码来进行的运算,运算的结果为答案的补码,再转换成原码就是最终答案。
2:byte类型的-1与int类型的255进行运算时,-1会自动提升为int类型。
下面是运算步骤:
首先是 -1 的原码: 10000000  00000000  00000000  00000001 (最高为为符号位,负号为1);
          -1 的反码: 11111111  11111111  11111111  11111110 (除了符号位,其他位置全部取反);
          -1 的补码: 11111111  11111111  11111111  11111111 (反码的基础上加1);
255为正数,原码、反码、补码均为自身:
        255 的补码: 00000000  00000000  00000000  11111111
所以-1 & 255的结果为:
                           00000000  00000000  00000000  11111111(最终答案的补码)
由于结果最高位为1,即结果为正数,转换成原码后不变:
                           00000000  00000000  00000000  11111111 (最终结果)
因此最终结果是:  -1 & 255 = 255

好像已经够全面了,希望你能看得明白
回复 使用道具 举报
去把基础视频前面有关原饭补码看一遍吧。  以后遇到这种问题就都懂了。  我看的刘意老师的视频上有讲。
回复 使用道具 举报
谢谢大家。不过这个比较符合我想要的答案。其他人都很好。我就挑个对的上眼的咯
回复 使用道具 举报
把它化为补码后计算再化为原码就知道了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马