有些时候给定了一段地址的首地址和末地址段条件下,需要求出这个地址段一共有多少个地址。有时候,给定了一个首地址和地址数量需要算末地址
我们可以使用相应计数法段减法或加法运算(基2、基256或基16)。还可以,先把地址转换成十进制数(基10),然后再进行相应的加减法运算。
例:
假设一段地址的首地址为146.102.29.0,末地址为146.102.32.255,求这个地址段的地址数。
我们可以使用基256计数法的减法运算,让末地址减去首地址。
146.102.32.255-146.102.29.0=0.0.3.255
在基256计数法下得到的结果是0.0.3.255.
为了求出这个地址段的地址数(以十进制数表示)。我们将这个数转换为基10计数法,结果再加上1
例:
某地址段段首地址为14.11.45.96 假设这个地址段的地址数为32个,那么它的末地址是什么?
我们把地址数减去1后再转换为基256计数法表示,也就是0.0.0.31
再加上首地址
运算
-
位非运算
位非(bitwise NO)运算是一种单操作数运算,它的输入只有一个。当我们对某个数做非运算时,通常是指对这个数求反。
而在二进制下对一个32位的数进行非运算就是反转它的每一位
每个1变成0,每个0变成1
对于一个32位的二进制数我们可以直接使用非运算,但是如果这个数被表示成四个字节的点分十进制记法时,我们需要使用一种快捷算法:分别用255减去每一个字节。
例:
位与运算
位与运算(bitwise AND)运算是一种双操作数运算,它的输入有两个。与运算就是将两个输入的每一个对应位分别进行比较,并选出较小的(如果相等,则任选一个)。
对于两个用二进制数表示的32位数,可以直接进行与运算。
如果这两个数被表示为点分十进制记法时,需要使用以下两种快捷算法:
- 如果两个字节中至少有一个是0或255,那么就选择较小的那个字节(如果相等,则任选一个)
- 如果两个字节都不等于0或255,我们可以把这两个字节分别写成具有八个项的多项式之和,且每一项都是2的乘方,然后我们选择各对应的项中较小的(如果相等则任选一个),最后再把选出的项累加起来就得到了结果。
位或运算
位或运算(bitwise OR)运算也是一种双操作数运算,它的输入有两个。或运算就是分别比较两个数相对应的每一位,并选择较大的(如果相等,则任选一个)
对于两个32位的二进制表示法,我们可以直接进行或运算,但如果这两个数被表示成点分十进制记法时,我们需要使用以下两种快捷算法:
- 如果两个字节中至少有一个字节是0或255,那么或运算就选择较大的那个字节(如果相等则任选一个)
- 如果两个字节都不等于0或255,我们可以把每个字节写成八个项的多项式之和,其中每项都是2的乘方。然后我们选择各个对应项中较大的(如果相等则任选一个),最后再把这些项加起来就得到或运算的结果。