目录
- 我的学习过程
- Python中逻辑运算符
- not
- and
- or
- 位运算符
- 取反(~)
- 与(&)
- 或(|)
- 广播地址计算方法
- IP地址
- 子网掩码
- 网络地址
- 广播地址
- 广播地址计算举例
我的学习过程
今天学习UDP的单播、多播、广播中,出现了广播地址的计算。这个涉及到十进制转二进制,位运算等概念。位运算按位取反、与、或让我想起了之前python中的逻辑运算符not、and、or。正好可以再回忆一遍。它们是否类似道理呢?
Python中逻辑运算符
在Python中,逻辑运算符与其他运算符相比,它的优先级最低,其次是成员运算符in/not in。
not
not 表达式
结果:结果的值只有True或者False。取not后表达式的相反值。表达式较长时注意加括号。
and
表达式1 and 表达式2 and 表达式3
表达式1的值:0,空串,或者False,或者其他数值。
表达式2,3同理。
结果:从左往右寻找,取第一个0或者空串或者False;若没有0,空串和False,则取最后一个表达式的值。
or
表达式1 or 表达式2 or 表达式3
表达式1的值:0,空串,或者False,或者其他数值。
表达式2,3同理。
结果:从左往右寻找,取第一个不是0或者空串或者False;若全是0,空串或False,则取最后一个表达式的值。
位运算符
取反(~)
~二进制数
取反操作:1取反成0,0取反成1,形成新的二进制数字串。
与(&)
二进制数1 & 二进制数2
使两个二进制数从末尾开始逐个对齐,长度短的,在开头补0对齐。
与操作:两个对齐的数均为1时取成1,其余取0。
例如:10001010&101011结果
10001010
00101011
结果:
00001010
或(|)
二进制数1 | 二进制数2
使两个二进制数从末尾开始逐个对齐,长度短的,在开头补0对齐。
或操作:两个对齐的数均为0时取成0,其余取1。
例如:10001010&101011结果
10001010
00101011
结果:
10101011
我的思考:
与和或,与python中的and和or有共通之处,与的两边都是1,结果才为1,python中and得两边都是true(或者1),结果才为True(或者1)。或同理。
广播地址计算方法
IP地址
引用百度百科
IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
IP地址是网络协议地址。有IPv4和IPv6两种。IPv4转IPv6可行,而IPv6转IPv4不一定可行。
IPv4:
由32位二进制数组成。
形式:XXX.XXX.XXX.XXX
例如:
1.1.1.1 直接广播地址
255.255.255.255 受限广播地址
IPv6:
一般由32个十六进制数组成。总共有128位长。
两个逻辑部分组成:
- 一个64位的网络前缀
- 一个64位的主机地址(叫EUI-64,根据物理地址自动生成)
子网掩码
引用百度百科
子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。
网络地址
引用百度百科
网络地址(Network address)则是互联网上的节点在网络中具有的逻辑地址,可对节点进行寻址。
网络地址 = IP地址&子网掩码
注意:需要转成二进制数计算,计算结果再转十进制数。
广播地址
我的理解:
广播地址指一个工作站同时向网络中所有工作站发送信息的一个特定的地址。
广播地址 = 网络地址 | (~子网掩码)
注意:需要转成二进制数计算,计算结果再转十进制数。