2-2的思路大概就是for循环中间部分就是判断是否继续循环的部分。如果判断失败则循环中断,按这个思路就可以用while循环然后用if进行判断写出来同样的判断部分。
2-3这部分刚理解的时候是有点难度。但是这个也算是比较简单的版本了,因为这里已经规定字符串里只有十六进制的字符,所以有难度也不大,后面会有比较难得混合型的字符转换整型这类的。(看完后面的看前面的好简单。。。)
刚开始就是先判断数组第一个元素是否是0然后++i判断下一个是否是x或者X,(这里我要说一下的是我看的题都是习题解答那本书上的。。。目前自创的代码还比不上书上的,但是这里的这个我感觉我需要改进一下。这个答案只是应付了题目,虽然目前来看应付题目就行不用那么深入,但也有必要有时间重写一个)这判断没什么必要出错检察机制都没有,(虽然题目已经规定了数组只有合法的十六进制数)判断成功然后进行数的换算,首先是判断是否是0-9,如果是则减去字符0,这里的原因之前介绍过,因为字符在机器里是有对应的另一个值而不是单纯的数值,这些表面的字符在机器里并不是他们自己本身的值,以为数字和字符都是连续的,所以如果是字符0-9,则减去字符0就可以得到一个当前字符对应的数值。
然后判断是否为a-f或者A-F,因为是else-if语句所以只会对其中一个表达式求值,所以不会出现好几个语句同时进行的状况。
跟上面说的一样,字符a在机器里也是有相应的值,字母在ANSII码表里也是连续的,所以通过当前的字符减去字符a就得到了他们的差也就是一个人们所理解的数值,然后加10,这是因为当前字符减去字符a得到的是他们之间的差(0-5)又因为十六进制中a-f表示的分别是10-15,所以要加上10。
然后就是计算数值,这里具体怎么解释我构思了半天也想不出来太好的办法。书上干脆就略过了...
计算到这里就已经证明了这是一个十六进制的数值,也就是多了一位数,n记录了之前的数值是多少,因为是十六进制,所以多一位目前的数就需要乘以16,拿十进制比喻应该能更好的理解,这跟十进制最后的位置每多一个0就需要乘以10
是一个道理,然后在加上当前的数值就是目前的总数值。
网友评论