c语言十进制与二进制转换:cqh-二进制可以表示的内容补充

原来是培训机构,白准备了,要交1.98w,培训两个月;简历不包装一下,就只有这种公司鸟我了,人都泛滥了,现在小编就来说说关于c语言十进制与二进制转换:cqh-二进制可以表示的内容补充?下面内容希望能帮助到你,我们来一起看看吧!

c语言十进制与二进制转换:cqh-二进制可以表示的内容补充

c语言十进制与二进制转换:cqh-二进制可以表示的内容补充

原来是培训机构,白准备了,要交1.98w,培训两个月;简历不包装一下,就只有这种公司鸟我了,人都泛滥了。

把之前的内容补充一下...

3.x 总结回顾

本应该 5 = 0b101,5.25 = 0b101.01; 但实际存储却不是如此;整数是存储带符号位的补码,如 -5 的补码为 0b11111011;

小数使用浮点数表示法存储三部分:符号、阶码、尾数。

如 0.25 = 0b0.01 = 0b1.0 * 2-2,单精度浮点数的内存表示:0 01111101 00000000000000000000000

不同的字符集中,每个字符都有一个唯一确定的序号,正常情况下直接将序号转成二进制存储。

3.y 课后习题

3.1 将 0xFA01 转为八进制数。

3.2 0b10101 11 等于多少?

3.3 将 322 转为二进制数。

3.4 文件编码为 UTF-8,写下无敌的你很寂寞ma,一共占用多少字节?使用 GBK 编码读取此文件,会显示什么内容?

3.z 习题答案

3.1 将 0xFA01 转为八进制数。

F ----> 1111 A ----> 1010 0 ----> 0000 1 ----> 0001 0xFA01 = 0b1 111 101 000 000 001 001 ----> 1 111 ----> 7 101 ----> 5 000 ----> 0 000 ----> 0 001 ----> 1 0xFA01 对应的八进制为 0175001

3.2 0b10101 11 等于多少?

0b10101 = 16 4 1 = 21 0b10101 11 = 21 11 = 32

3.3 将 322 转为二进制数。

322除以2,商161,余0 161除以2,商80,余1 80除以2,商40,余0 40除以2,商20,余0 20除以2,商10,余0 10除以2,商5,余0 5除以2,商2,余1 2除以2,商1,余0 1除以2,商0,余1 322 = 0b101000010

3.4 文件编码为 UTF-8,写下无敌的你很寂寞ma,一共占用多少字节?使用 GBK 编码读取此文件,会显示什么内容?

方式一

UTF-8 中汉字占用 3 个字节,英文占用 1 个字节,总共 3 * 7 2 = 23 个字节。

该字符串对应的二进制为:

111001101001011110100000 111001101001010110001100 111001111001101010000100 111001001011110110100000 111001011011111010001000 111001011010111110000010 111001011010111110011110 01101101 01100001

怎么找的,以 “无” 为例,在 Unicode 字库表中找到 “无” 的序号 0x65E0 转为二进制 0110 0101 1110 0000,使用 UTF-8 编码保存时,找到对应范围为第三梯队:1110XXXX 10XXXXXX 10XXXXXX,把二进制填入得:11100110 10010111 10100000。

使用 GBK 编码读取 1 开头的读取两个字节,11100110 10010111 转成十六进制 E697,在 GBK 编码表中对应 “鏃”,依次类推;

1110011010010111 1010000011100110 1001010110001100 1110011110011010 1000010011100100 1011110110100000 1110010110111110 1000100011100101 1010111110000010 1110010110101111 1001111001101101 01100001

对应 鏃犳晫鐨勪綘寰堝瘋瀵瀖a。

方式二

public static void main(String[] args) throws Exception { String str = "无敌的你很寂寞ma"; // 把字符串按 UTF-8 编码得到 23 个字节 byte[] byteArr = str.getBytes("UTF-8"); System.out.println("数组的长度为:" byteArr.length); // 按 GBK 解码 str = new String(byteArr, "GBK"); System.out.println(str); }

说明:

class Test { static String name = "无敌的你很寂寞ma"; public static void main(String[] args) { System.out.println(name); } }

如果源文件的编码是 UTF-8,则 "无敌的你很寂寞ma" 对应的二进制编码为:

1110011010010111 1010000011100110 1001010110001100 1110011110011010 1000010011100100 1011110110100000 1110010110111110 1000100011100101 1010111110000010 1110010110101111 1001111001101101 01100001

输入 javac 命令,默认按 GBK 解码此段二进制得到 “鏃犳晫鐨勪綘寰堝瘋瀵瀖a”。

再转为 UTF-8 编码存储到 class 的某项常量中:

11101001 10001111 10000011 11100111 10001010 10110011 11100110 10011001 10101011 11101001 10010000 10101000 11100101 10001011 10101010 11100111 10110110 10011000 11100101 10101111 10110000 11100101 10100000 10011101 11100111 10011000 10001011 11100111 10000000 10110101 11100111 10000000 10010110 01100001

那么运行程序时访问 name 变量,得到的是 “鏃犳晫鐨勪綘寰堝瘋瀵瀖a”。

造成此问题的原因就是 java 文件所使用的编码与执行 javac 命令时采用的解码方式 -encoding 某编码 不一致造成的。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页