#include <iostream> using namespace std; int main() { long long int a, b, c, d; long long int num; while (scanf("%lld.%lld.%lld.%lld", &a, &b, &c, &d) != EOF) { cin >> num; cout << (a << 24) + (b << 16) + (c << 8) + d << endl; a = num >> 24; num = num - (a << 24); b = num >> 16; num = num - (b << 16); c = num >> 8; d = num - (c << 8); cout << a << "." << b << "." << c << "." << d << endl; } }优化一下这段代码
时间: 2024-04-22 19:24:16 浏览: 86
这段代码已经相当简洁和高效。不过,我们可以对其进行一些优化,以提高代码的可读性和可维护性。
首先,我们可以使用更具有描述性的变量名,以增加代码的可读性。例如,将`a`、`b`、`c`和`d`改为`part1`、`part2`、`part3`和`part4`。
其次,我们可以使用无符号整型数据类型来存储IP地址的各个部分,因为IP地址的每个部分都应该是非负整数。可以使用`uint8_t`来代替`long long int`。
最后,我们可以将位运算的逻辑进行封装,以提高代码的可读性。可以编写一个函数,将转换为长整型数值的逻辑和将长整型数值转换回IP地址的逻辑分别封装在函数中。
下面是优化后的代码示例:
```cpp
#include <iostream>
#include <cstdint>
using namespace std;
uint32_t ipToLong(uint8_t part1, uint8_t part2, uint8_t part3, uint8_t part4) {
return (part1 << 24) + (part2 << 16) + (part3 << 8) + part4;
}
void longToIp(uint32_t num, uint8_t& part1, uint8_t& part2, uint8_t& part3, uint8_t& part4) {
part1 = num >> 24;
num = num - (part1 << 24);
part2 = num >> 16;
num = num - (part2 << 16);
part3 = num >> 8;
part4 = num - (part3 << 8);
}
int main() {
uint8_t part1, part2, part3, part4;
uint32_t num;
while (scanf("%hhu.%hhu.%hhu.%hhu", &part1, &part2, &part3, &part4) != EOF) {
cin >> num;
cout << ipToLong(part1, part2, part3, part4) << endl;
longToIp(num, part1, part2, part3, part4);
cout << static_cast<unsigned int>(part1) << "." << static_cast<unsigned int>(part2) << "." << static_cast<unsigned int>(part3) << "." << static_cast<unsigned int>(part4) << endl;
}
}
```
这样,代码变得更加易读,同时也提供了更好的可维护性和可扩展性。
阅读全文