为了账号安全,请及时绑定邮箱和手机立即绑定

想了一晚上没想出来,求老师解答/(ㄒoㄒ)/~~

http://img1.sycdn.imooc.com//5943f3500001ed5d13660736.jpg请问大家,“慕课”两个中文字符的每个字节为什么有32位?不是每个字节8位吗?

正在回答

7 回答

因为你转换的结果是二进制,你现在可能已经知道了。

1:byte是8字节

2:int是32字节

3:toBinaryString()是将内容转换成2进制

由于2个字节组成一个汉字,而你又是2进制的,所以最终结果就是:

11111111111111111111111111000100   11111111111111111111111110111101

  

                  

         


0 回复 有任何疑惑可以回复我~

不用 太计较输出的内容,GBK中一个汉字就是一个字节(8bit),

Integer.toBinaryString(int);函数是将一个integer类型整数,转换为无符号2进制数。

列子中: 转成字节为:-60 -67

转成java最终能显示出来的位数32高位为0补1(双字节);

结果为:11111111111111111111111111000100(其中11000100代表-60)    有符号的二进制取补码的反码     60

0 回复 有任何疑惑可以回复我~

我认为是因为每个字节占八位  这里是16进制的  也就是八位十六进制的数   每个十六进制的数转换为二进制是四位

所以转换为二进制就是32位了    

0 回复 有任何疑惑可以回复我~

看一下你的这个java文件是什么编码。如果是utf-8的话。汉子占3个字节就是32位

1 回复 有任何疑惑可以回复我~

慕课这两个字转换为字节后是负的,负的byte自动转换为int是会按符号位扩展,正数的话是0没什么影响,负数是1,你再按老师说的加个&0xff就会将前面的置0了,就成8位的了。前面那节二进制我现在都很懵逼。

0 回复 有任何疑惑可以回复我~

  你的输出函数里面不一样  System.out.println(Integer.toHexString(b)); 

在Java中,如果想要把一个十进制整数转换为十六进制,可以使用Integer.toHexString(int i)方法

0 回复 有任何疑惑可以回复我~

关键是汉字根本就是不字节啊。。。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

想了一晚上没想出来,求老师解答/(ㄒoㄒ)/~~

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信