关于字符编码中遇到的问题
  1. 如果一个10进制数的2进制码超过了8位(一字节)
    比如说324的2进制码为 :101000100. 那么在内存中.324占的空间是2字节还是1字节?
    如果是按2字节来存储. 那么是写成 000000101000100 还是 101000100 ?

  2. UNICODE 编码的字符 '严' 对应的UNICODE 的16进制编码是 '4e25'.
    那么内存中 存的对应的2进制码是 0100,1110,0010,0101 还是 1001110, 100101 还是 100,111,10,101. 我的意思'严'字的
    2进制码应的字符串表现形式是啥?

  3. code 1:
    byte [] sz1= new byte ["严".getBytes("UNICODE").length];
    sz1="严".getBytes("UNICODE");
    for (byte b : sz1)
    {
    // unicode编码 : 0100,1110,0010,0101 4E25
    System.out.println("该字节存的十进制数str是 : " + b);
    System.out.println("该字节代表的2进制数str是 : "+ (Integer.toBinaryString(b)+""));
    System.out.println("该字节对应的16进制数是 : U+"+ (Integer.toHexString(b)+""));
    }
    1).执行上面的代码发现. code 1 打印的 sz1 中第一条 和 第二条的值是 '1','10' .请问 '1' 和 '10'
    是用来标示的吗?

2).code1 打印的第3条和第4条的值 是 '25','4E' 刚好与'严'的unicode编码'4e25'相反.朋友说原因是
'大小端显示的顺序不同' 我不太理解这句话.谁能用通俗的话解释下吗?

2个回答

[code="java"]1.
如果一个10进制数的2进制码超过了8位(一字节)
比如说324的2进制码为 :101000100. 那么在内存中.324占的空间是2字节还是1字节?
如果是按2字节来存储. 那么是写成 000000101000100 还是 101000100 ? [/code]

看你设置的类型,如果是Integer(int)型,在java里面都是32位。

[quote]2.
UNICODE 编码的字符 '严' 对应的UNICODE 的16进制编码是 '4e25'.
那么内存中 存的对应的2进制码是 0100,1110,0010,0101 还是 1001110, 100101 还是 100,111,10,101. 我的意思'严'字的
2进制码应的字符串表现形式是啥?

2).code1 打印的第3条和第4条的值 是 '25','4E' 刚好与'严'的unicode编码'4e25'相反.朋友说原因是
'大小端显示的顺序不同' 我不太理解这句话.谁能用通俗的话解释下吗? [/quote]

这两个问题应该一起回答, 你需要先搞清大端(big endian) 和小端(little endian)的概念, 大端就是高字节的位放在前面, 小端就是高字节的放在后面。 比如说严的16进制编码是 '4e25'. 那么大端就是'4e25'.,小端就是"254e"。 大端还是小端和机器硬件等有关,一般你在本机上实验一下就行了。

立即提问
相关内容推荐