1,
int i = 445;
byte b = (byte)(i%256);我们知道:i%256=189,如果不用(byte)强制转换,无法通过编译。用了(byte),系统会把32位整形的低八位取出来放进b里面。于是,b的二进制就和189的二进制一样。但是由于第一位是符号位,所以,打印出来的b应该是负数。2,
e=0x0f
int i = 445;
byte b = (byte)(i%256);我们知道:i%256=189,如果不用(byte)强制转换,无法通过编译。用了(byte),系统会把32位整形的低八位取出来放进b里面。于是,b的二进制就和189的二进制一样。但是由于第一位是符号位,所以,打印出来的b应该是负数。2,
e=0x0f
解决方案 »
- 使用while循环语句计算1+1/2!+1/3!+...1/20!之和,请看看程序是否对。
- java还是eclipse设置问题,大虾请进
- 帮忙看一道递归题!
- 如何利用正则表达式提取内容?
- Java类修饰符为什么没有protect?
- 关于序列化的一些问题
- 菜!!!!!!!!
- 用JBuilder7,存盘的时候会莫名其妙的多出以~为内容的零时文件,如何关掉这个功能?
- 半夜苦读!!明早起床!!请各位师傅鼓励我一下吧!!
- 剩下一台可以向网友提供空间等学习环境。6台服务器齐工作,三台用于Dephi开发论坛,两台用于Google镜象,进来请看》》》
- 块被炒了,帮我,涉及unix filetable !
- JVAV虚拟机作为应用程序的开发平台是否也可作为应用程序的运行与管理平台?
2.测了一下,得到结果:
byte b = (byte) 0xf1 -----》 b=15
b & 0xff ----------》 241 (不是8位吗?)
byte e = (byte) ((b & 0xff) >> 4) ---》e=15
由于不懂,所以觉得十分奇怪。 0xf1 & 0xff 怎么会是 241? 为什么把最高位也加进去了?不是符号位吗。 而且,b & 0xff --》11110001,再 >> 4 也是有符号扩展,应该是11111111啊?
对了,11110001要右移的时候会提升成int,不会是直接在前面加0吧?应该是加1吧?(往范围大的类型转,应该是保证原值大小不变的吧?)