帮我看下这个代码什么意思!

浪漫小和 2012-12-17 03:25:26
int idx = ipSection.indexOf('-');
String[] sips = ipSection.substring(0, idx).split("\\.");
String[] sipe = ipSection.substring(idx + 1).split("\\.");
String[] sipt = ip.split("\\.");
long ips = 0L, ipe = 0L, ipt = 0L;
for (int i = 0; i < 4; ++i) {
ips = ips << 8 | Integer.parseInt(sips[i]);
ipe = ipe << 8 | Integer.parseInt(sipe[i]);
ipt = ipt << 8 | Integer.parseInt(sipt[i]);
}
if (ips > ipe) {
long t = ips;
ips = ipe;
ipe = t;
}
return ips <= ipt && ipt <= ipe;


for (int i = 0; i < 4; ++i) {
ips = ips << 8 | Integer.parseInt(sips[i]);
ipe = ipe << 8 | Integer.parseInt(sipe[i]);
ipt = ipt << 8 | Integer.parseInt(sipt[i]);
}

我不明白这个for循环里面 << 和 | 的意思

...全文
181 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
abc41106 2012-12-21
  • 打赏
  • 举报
回复
。。。。无满意结帖。。好桑心哇。。
abc41106 2012-12-18
  • 打赏
  • 举报
回复
引用 8 楼 abc41106 的回复:
引用 7 楼 wdcqrs 的回复: 那他这个为什么一定是移动 8 位? 因为那四个段都是小于256的值,即8位。IP地址一共是32位,每8位是一段,正好一个long整型值也是32位
Sorry!java里的long是64位的,所以说如果你想移动9位10位理论上也是没错的,但是道理上不好理解,8位足够而且刚刚好,为啥要移9位呢。
abc41106 2012-12-17
  • 打赏
  • 举报
回复
引用 7 楼 wdcqrs 的回复:
那他这个为什么一定是移动 8 位?
因为那四个段都是小于256的值,即8位。IP地址一共是32位,每8位是一段,正好一个long整型值也是32位
浪漫小和 2012-12-17
  • 打赏
  • 举报
回复
那他这个为什么一定是移动 8 位?
abc41106 2012-12-17
  • 打赏
  • 举报
回复
引用 4 楼 wdcqrs 的回复:
为什么要移8位然后再或上sips[i]的整形值 ?
左移8位空出来低8位,然后或上下一个段的值啊。就像是你有4个1位数,想拼成一个4位数,就得乘以10再加上下一个。一样的道理
abc41106 2012-12-17
  • 打赏
  • 举报
回复
引用 3 楼 wdcqrs 的回复:
为什么要这么做呢?
我猜这个是用来判断某个IP是不是在给定IP范围以内的。 比如: 给定ip范围:192.168.1.1-192.168.1.199 某个ip:192.168.1.188 for循环的作用是把ip转换成整形值ips对应192.168.1.1;ipe对应192.168.1.199;ipt对应192.168.1.188
浪漫小和 2012-12-17
  • 打赏
  • 举报
回复
为什么要移8位然后再或上sips[i]的整形值 ?
浪漫小和 2012-12-17
  • 打赏
  • 举报
回复
为什么要这么做呢?
abc41106 2012-12-17
  • 打赏
  • 举报
回复
位运算 << 是左移 | 是位或 ips = ips << 8 | Integer.parseInt(sips[i]);就是ips左移8位然后或上sips[i]的整形值
浪漫小和 2012-12-17
  • 打赏
  • 举报
回复
还有为什么 << 之后还 | 然后再赋值 ?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧