本帖最后由 袁錦泰 于 2012-5-22 11:25 编辑
首先我请你耐心看完下面的话,在这里我不打算给你讲解位运算,因为与你的问题没有直接关系.只针对(char)(temp-10+'A');这句话为你讲解.如果你的疑问已经解决了就不必浪费时间了.
然后我想问你这是不是一个做16进制数转换的程序?16进制数的特点是什么?在程序中你怎样才能体现出16进制数表达形式的特点?明确这几点对你理解程序是至关重要的.
1.按照平常思路我们对十六进制数的理解是从0到15表示.对应十进制数就是0-9、A-F.0-9我就不说了,这里的A-F所对应的是10-15.
2.在你取最低八位的过程中,每取出八位的结果并不确定,但肯定不会大于16(小于等于15),既然是十六进制转换,你就要按照十六进制数的特点来表示你最终得出的结果,这时你在输出语句中写出了(char)(temp-10+'A');
3.变量temp代表的是每次取出最低八位后的值,这个值像我在第二点所说,肯定不会大于16(小于等于15).好了,按照我们平常的思路这个十六进制数的结果我们已经得到了,但是它按照计算机语言的表达形式还不是很完美,为什么?因为如果每次取出八位的值中含有大于10小于15的结果,就必须要转换为其对应的A-F字母,这样才符合十六进制数的表达形式特点.
4."temp-10"-->假如你的最低八位值大于10,那么取出个位数字;+'A'-->A对应十六进制数中的10,如果你的最低八位恰好为10也不会影响最终的结果,在+'A'过程中涉及到自动类型提升,也就是说本是字符'A',但在这个算术表达式中字符型的'A'被转换为int型的'A',对照ACSII的数字就是65,现在temo-10+'A'的最终结果我们已经确定了,它是一个int型的数字.
5.回头看你执行这句输出语句前所要执行的判断条件是如果最低八位大于9,那么输出temp-10+'A',这时你发现输出的结果是一个int型的数字,根据判断条件你想要得出的结果是如果最低八位大于9,那么我就要与之对应的字母A-F.结果为int该怎么办?在算术表达式前面加上(char),意思就是表示,无论后面的结果是什么数据类型,我最终就是要得到字符型的结果,在这里(char)的作用就在于此,强行转换数据类型.
最后你如果还不能理解,联系我! |