课程
/后端开发
/Java
/文件传输基础——Java IO流
请问大家,“慕课”两个中文字符的每个字节为什么有32位?不是每个字节8位吗?
2017-06-16
源自:文件传输基础——Java IO流 1-1
正在回答
因为你转换的结果是二进制,你现在可能已经知道了。
1:byte是8字节
2:int是32字节
3:toBinaryString()是将内容转换成2进制
由于2个字节组成一个汉字,而你又是2进制的,所以最终结果就是:
11111111111111111111111111000100 11111111111111111111111110111101
不用 太计较输出的内容,GBK中一个汉字就是一个字节(8bit),
Integer.toBinaryString(int);函数是将一个integer类型整数,转换为无符号2进制数。
列子中:慕 转成字节为:-60 -67
转成java最终能显示出来的位数32高位为0补1(双字节);
结果为:11111111111111111111111111000100(其中11000100代表-60) 有符号的二进制取补码的反码 60
我认为是因为每个字节占八位 这里是16进制的 也就是八位十六进制的数 每个十六进制的数转换为二进制是四位
所以转换为二进制就是32位了
看一下你的这个java文件是什么编码。如果是utf-8的话。汉子占3个字节就是32位
慕课这两个字转换为字节后是负的,负的byte自动转换为int是会按符号位扩展,正数的话是0没什么影响,负数是1,你再按老师说的加个&0xff就会将前面的置0了,就成8位的了。前面那节二进制我现在都很懵逼。
你的输出函数里面不一样 System.out.println(Integer.toHexString(b));
在Java中,如果想要把一个十进制整数转换为十六进制,可以使用Integer.toHexString(int i)方法
关键是汉字根本就是不字节啊。。。
举报
为您介绍IO流的使用,以及对象的序列化和反序列化的内容
1 回答求大神来解答
7 回答编码问题求解答
2 回答好想问问老师一个底层的问题
3 回答遍历结果并不是如老师所讲的,求解答
4 回答关于read()输出问题,求解答。(自学党真痛苦)