题目描述
IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
用户看到的IP地址通常用“点分十进制”,表示成(a.b.c.d)的形式,其中,a, b, c, d都是0~255(含0和255)之间的十进制整数。
但是在网络传输时,a, b, c, d都被编码成8位二进制,一起拼成32位二进制数传输。如果把32位二进制数看成无符号的十进制整数X,
则有下列关系:
X = a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d
我们以样例说明,192.9.16.12各自对应的8位二进制如下图,将这些二进制连接起来构成的整数,对应的十进制是3221819404。
现在的问题是给定X,求其点分形式。
输入
一个无符号十进制整数X(0<=X<232).
输出
输出X对应的点分十进制表示的IP地址,形式为a.b.c.d。
样例输入 Copy
3221819404
样例输出 Copy
192.9.16.12
提示
定义类型用unsigned int,scanf输入格式用"%u"
#include <stdio.h>
int main() {
unsigned int X;
scanf("%u", &X);
unsigned int a, b, c, d;
d = X & 255;
c = (X >> 8) & 255;
b = (X >> 16) & 255;
a = (X >> 24) & 255;
printf("%u.%u.%u.%u\n", a, b, c, d);
return 0;
}
1. 按位或(|)运算符:
- 按位或运算符(|)用于将两个操作数的每个对应位进行逻辑或操作。如果操作数的对应位之一为1,则结果的对应位将为1;如果两个操作数的对应位都为0,则结果的对应位将为0。
- 对于进制转换,按位或运算符常用于将多个低位表示的数字组合成一个更高位表示的数字。
- 在IP地址转换中,我们可以使用按位或运算符将四个分段的数字位合并成一个32位的无符号整数。
- 示例:a = a | (b << 8),将b左移8位,并与a进行按位或运算。
2. 按位与(&)运算符:
- 按位与运算符(&)用于将两个操作数的每个对应位进行逻辑与操作。如果两个操作数的对应位都为1,则结果的对应位为1;否则,结果的对应位为0。
- 对于进制转换,按位与运算符常用于提取一个数字表示的各个分段(如IP地址的四个分段)。
- 在IP地址转换中,我们可以使用按位与运算符将一个32位的无符号整数拆分为四个分段的数字位。
- 示例:b = (X >> 8) & 255,将X右移8位,并与255进行按位与运算,提取出X的第2个分段。
在IP地址转换中,我们使用按位或运算来将四个分段的数字位合并为一个32位的无符号整数,并使用按位与运算来从一个32位的无符号整数中提取出四个分段的数字位。这样就可以在点分十进制表示和无符号十进制表示之间进行相互转换。