DataInputStream a = new DataInputStream(System.in);
int b = a.readInt();
System.out.println(b);当我输入数字12并回车的时候,输出什么呢?
int b = a.readInt();
System.out.println(b);当我输入数字12并回车的时候,输出什么呢?
解决方案 »
- 关于jsp中插入<object>插件通过页面跳转无效
- 从100里随机生成20个不重复的数
- 日文项目,中文系统下JBuilder开发,翻译成日文,出现问题!急寻帮助!寻求相同项目经历!
- 这一段是哈意思??谢谢!!
- JTable 的问题(急!急!急!)
- 调查:(耽误您不到一分钟的时间,我们学JAVA的讨论一下)你们用JAVA都做什么东西?
- 请问 谁有《打砖块》游戏的源代码? 或者知道怎么做的请进
- 2003 server 下安装了j2sdk-1_4_1_03-windows-i586之后,双击执行.jar文件为什么一闪而过,XP下却正常运行?
- What should I do to close a Applet? Use this.destroy() can't do that??????.
- 请问transient修饰的变量有什么意义?
- 父窗体点击菜单弹出输入对话框,然后父窗体等待输入窗体的响应,如输入窗体录入数据并确认,返回父窗体一个字符串,怎么做?
- 如何把string数组类型转换成int类型
楼主【tteesstt】截止到2008-07-30 08:56:01的历史汇总数据(不包括此帖):
发帖的总数量:138 发帖的总分数:8900 每贴平均分数:64
回帖的总数量:95 得分贴总数量:11 回帖的得分率:11%
结贴的总数量:138 结贴的总分数:8900
无满意结贴数:0 无满意结贴分:0
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:0.00 % 无满意结分率:0.00 %
敬礼!
取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=tteesstt
理由在API DOCS 上面有.读取四个输入字节并返回一个 int 值。设 a 为第一个读取字节,b 为第二个读取字节,c 为第三个读取字节,d 为第四个读取字节。返回的值是:
(((a & 0xff) << 24) | ((b & 0xff) << 16) |
((c & 0xff) << 8) | (d & 0xff))
此方法适用于读取用接口 DataOutput 的 writeInt 方法写入的字节。
因为你输入内容是当作字符串的,所以12会变成3132的十六进制来传递。你读取的是int,就是读取4个字节,而输入的只有两个字节,系统会补上什么应该会和系统有关吧。一般好像是你输入的换行符,windows默认好像是\r\n。
那么你获取的int的16进制数应该是31320D0A
返回此输入流的下四个字节,将它们解释为一个 int。
然后计算((49 << 24) + (50 << 16) + (13 << 8) + (10 << 0))就得到了结果 825363722!
import java.io.IOException;public class Tteesstt { public static void main(String[] args) throws IOException {
DataInputStream a = new DataInputStream(System.in);
int b = a.readInt();
System.out.println(b);
}}输入:12输出:825363722分析:下面是 java.io.DataInputStream.readInt() 方法的源代码: public final int readInt() throws IOException {
int ch1 = in.read();
int ch2 = in.read();
int ch3 = in.read();
int ch4 = in.read();
if ((ch1 | ch2 | ch3 | ch4) < 0) throw new EOFException();
return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));
}其中 in 是包装入此 DataInputStream 的输入流,也就是这里的 System.in,而 readInt 方法里的 in.read() 在代码中也就相当于 System.in.read() 了。剩下的请看下面代码的运行结果:import java.io.IOException;public class Test { public static void main(String[] args) throws IOException {
System.out.println("1, 2, \\r, \\n 这四个 Unicode 字符编码值的二进制形式如下:");
System.out.printf("%1$32s\n", Integer.toBinaryString((int)'1'));
System.out.printf("%1$32s\n", Integer.toBinaryString((int)'2'));
System.out.printf("%1$32s\n", Integer.toBinaryString((int)'\r'));
System.out.printf("%1$32s\n", Integer.toBinaryString((int)'\n'));
System.out.println();
System.out.println("请输入 12 然后回车:");
int a = System.in.read();
int b = System.in.read();
int c = System.in.read();
int d = System.in.read();
System.out.println("虽然感觉上我们只输入了两个字符 1 和 2,但实际上在这之后");
System.out.println("还有两个字符即回车符 \\r 和换行符 \\n 也一同被输入进去了。");
System.out.println("所以实际上一共输入了 4 个字符,其 Unicode 编码值的二进制形式如下:");
System.out.printf("%1$32s\n", Integer.toBinaryString(a));
System.out.printf("%1$32s\n", Integer.toBinaryString(b));
System.out.printf("%1$32s\n", Integer.toBinaryString(c));
System.out.printf("%1$32s\n", Integer.toBinaryString(d));
System.out.println();
System.out.println("剩下的就简单了,此源代码中的 4 次 System.in.read() 每次会");
System.out.println("将一个字符 16 位编码值的低 8 位当作一个字节,前面补上 24 个 0 后凑够 32 位后");
System.out.println("被当作一个 int 类型的值返回出来,所以上面四次 read() 读出的是 4 个字符低 8 位的二进制信息。");
System.out.println("而楼主代码的输出结果是 825363722,它的二进制形式为:");
System.out.println();
System.out.printf("%1$32s\n", Integer.toBinaryString(825363722));
System.out.println();
System.out.println("这恰好是在 DataInputStream.readInt() 中将这 4 个字节数据拼成一个完整的 32 位整数的结果。");
}}