小弟刚刚入门问个简单问题
就是我经常看到一些代码是把十进制转换为16进制或其他进制来比较大小,不懂为什么这样转换会提高效率,就好比加减计算有正负的数字时最好把他们全部以补码计算样,我说的不是很清楚望大家谅解 问题点数:20、回复次数:6Top
1 楼limodou()回复于 2006-03-01 18:39:42 得分 0
不知道.没这么用过.象这种处理应该是编译器做的事.Top
2 楼fibbery(飞)(睡足了才能提高效率)回复于 2006-03-01 20:04:23 得分 0
举一个具体的例子,可能会好些!Top
3 楼koffdsa(病毒)回复于 2006-03-01 20:39:47 得分 0
恩好,上次我也是在这个板块看到一个人提问,问通过用perl实现检测输入的IP地址在192.168.1.7-192.168.2.255内,有人回复基本都是把他们转换成16进制来比较.我只学过些C语言觉得可以每次都通过.符号为分割点来判断比较,但这绝没转换16进制在比较那么简单,我就是不懂通过16进制是因为什么提高了代码效率(小弟真的啥也不懂见笑了各位)Top
4 楼limodou()回复于 2006-03-01 22:17:55 得分 0
这只是简单与否的问题,并不能表示就是效率高呀.毕竟还要转换啊.Top
5 楼xyzxyz1111(程序员的自我修养)回复于 2006-03-01 22:48:50 得分 0
十进制和十六进制数只是表示的不同,像192, 168之类的十进制数只在源程序中有进制的概念,编译以后自然变成二进制表示的。所以不需要转换。192 == 0xC0, 他们所说的ip比较,可能是将一个字符串"192.168.2.255"转换成整数 , 然后用比较快的位运算计算。 和计算ip掩码差不多。
Top
6 楼xyzxyz1111(程序员的自我修养)回复于 2006-03-01 22:56:43 得分 0
ip_addr = "192.168.1.7"
reduce(lambda x, y: (x<<8) + int(y), ip_addr.split("."), 0)Top




