《javaByte注意事项学习资料.doc》由会员分享,可在线阅读,更多相关《javaByte注意事项学习资料.doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Good is good, but better carries it.精益求精,善益求善。javaByte注意事项-Javabyte操作注意事项(2010-11-1017:19:19)转载标签:杂谈Java对byte的+-*/1|0x01;这个写法里有多重错误,现逐个纠正:1编译器报错,int无法直接自动转化为byte为解决此问题,加强制转化。byteb=(byte)0xf8;byteb2=(byte)(b1)|0x01);2输出为11111101不是我们想要的00111101原因是是有符号右移,当符号位为1时,左侧补的是1而非0。修改为使用无符号右移:byteb=(byte)0xf8;by
2、teb2=(byte)(b1)|0x01);3运行后发现输出依然为11111101原因是byte在运算前先转化为int再行位运算,因此分解后的运算步骤如下:b转化为int11111000转化为11111111111111111111111111111000无符号右移1位01111111111111111111111111111100与0x01按位或01111111111111111111111111111101强制转化回byte11111101解决方案,在右移运算前先位与0xffbyteb=(byte)0xf8;byteb2=(byte)(b&0xff)1)|0x01);/注意必须加括号,因为
3、的优先级高于&4运行后发现输出为我们想要的结果01111101。运算步骤分解如下:b转化为int11111000转化为11111111111111111111111111111000和0xff进行&操作00000000000000000000000011111000无符号右移1位00000000000000000000000001111100与0x01按位或00000000000000000000000001111101强制转化回byte011111015关于System.out.println();byteb=(byte)0xf8;System.out.println(b);-最终输出为-8
4、运算步骤为:b转化为int11111000转化为11111111111111111111111111111000取符号位-1111111111111111111111111111000取返+1(因为是按补码运算)-0000000000000000000000000001000输出-8最终结论:1区分使用和2在操作前要首先&0xff3注意符号优先级,正确使用括号。4需要强烈注意的一点是&的优先级小于+.因此a=b&0xff+2000的结果可能不是你想要的附:打印byte,int每个bit值的函数。publicstaticvoidprintByte(byteb)for(inti=7;i=0;i-)intshiftleft=(bi)&0x01;System.out.print(shiftleft);System.out.println();publicstaticvoidprintInt(intb)for(inti=31;i=0;i-)intshiftleft=(bi)&0x01;System.out.print(shiftleft);System.out.println();-