A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 8047107 高级黑马   /  2013-5-13 19:10  /  1317 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 8047107 于 2013-5-13 19:26 编辑


看图了哈,这里,老师讲到只要num!=0.循环就一直转下去。视频里也有很多同学不解,然后老师说你们说的是temp我说的是num。
我想一会,有点了解了。但是始终无法用语言表达清楚,谁能解释一下呢?

5 个回复

倒序浏览
尹桥印 发表于 2013-5-13 19:12
num一直无符号右移4位,移到num == 0的时候再右移的话还是一大堆0,是不是就没有意思了? ...

嗯 我觉得跟temp一点关系都没有 老师提到这个我很纳闷  
就是num等于0 不等于0的问题。
回复 使用道具 举报
其中temp是存放的每次num右移之前取出的低四位值,肯定不能拿temp去判断了,num右移了4位之后,只要不等于0,当然就会循环执行啦,所以这里用num!=0条件语句是最好的。因为我们的目的是取出num中每四个二进制位的值。
回复 使用道具 举报
本帖最后由 任江峰 于 2013-5-13 19:33 编辑

num是指要转换成十六进制的数。
temp是指num的二进制的串中的最低4位的十进制值。
num&15后(15的最低4位是1111),剩下的就是二进制中的最低4位,就是temp。temp只有4位它的值一定是1到15。通过1到15的角标去查表,找到对应的十六进制值。这就取到了num个位的十六进制值。
num取过一次后,右移4位,接着取num十位上的十六进制值。
num再右移4位,取num的千位上的十六进制值。
。。。
由于右移使用的是>>>,高位补的是0。这样当取完num的所有十六进制位后,num的值等于0。结束循环。
也就是num!=0时,表示还有高位的十六进制位没取完。
num==0时,表示所有的十六进制位都已经取完,应该结束循环。
回复 使用道具 举报
num是你要转换的数,这个数转换成二进制也许只有前8个二进制位上有数。移第三次和第四次不就都一样了吗?不过移的都是0以后应该就会出现num==0了。循环就结束了。这个temp记录的才是转换来的十六进制数。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马