一个程序里define mask_code是什么意思,掩码又是用来干什么的?

一个程序里define mask_code是什么意思,掩码又是用来干什么的?,第1张

#define MASK_CODE 0x01

这句是宏定义,它定义了一个 宏常量,常量名字叫 MASK_CODE,它的数值等于 十六进制 1,也就是十进制1,枝枯或 二进制1。

程序预编译期间,编译器会把程序里所有 MASK_CODE 替换成 0x01, 然后再编译。

程序中 利用 二进制位运算符 <<做左移运算,用 &运算取出 变量的某一位 等 位运算 *** 作,判断有无重复数字。

MASK_CODE 英文汉译后意思叫掩码,掩码宏旦是啥解释起来很猛绝洞啰嗦,其实这里与掩码意思无大关系,它就是个 标识符。你起别的名字也可以。例如#define MK 0x01 ( 程序中的标识符MASK_CODE 也改为 MK, 或干脆 改 成 0x01 或 1),结果是一样的。

弄懂 二进制位运算 比研究英文重要。

就是一串2进制 对目标字段进行位与运算

漏游屏蔽当前的输入位。

ip 地址的规则 255.255.255.0 表示子网掩码地址

将子网掩码转化为悉或2进制代码后 如:192.168.1.2 /24 首先判断为C类网 子网为:255.255.255.0 换算为二进制:11111111.11111111.11111111.00000000

1代表网络位 0代表主机位 作为子网掩码睁搜伍 1和0 都必须是连续的

子网掩码和ip地址的关系

子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。

最为简单的理解就是两台计算机各自的IP地址与子网掩码进行AND运算后,如果得出的结果是相同的,则说明这两台计算机是处于同一个子网络上的,可以进行直接的通讯。就这么简单。

请看以下示例:

运算演示之一:aa I P 地址 192.168.0.1 子网掩码 255.255.255.0 AND运算

转化为二进制进行运算: I P 地址 11010000.10101000.00000000.00000001 子网掩码 11111111.11111111.11111111.00000000 AND运算

11010000.10101000.00000000.00000000 转化为十进制后为:

192.168.0.0

运算演示之二: I P 地址 192.168.0.254 子网掩码 255.255.255.0 AND运算

转化为二进制进行运算: I P 地址 11010000.10101000.00000000.11111110 子网掩码 11111111.11111111.11111111.00000000 AND运算

11000000.10101000.00000000.00000000 转化为十进制后为:

192.168.0.0

运算演示之三: I P 地址 192.168.0.4 子网掩码 255.255.255.0 AND运算

转化为二进制进行运算: I P 地址 11010000.10101000.00000000.00000100 子网掩码 11111111.11111111.11111111.00000000 AND运算

11000000.10101000.00000000.00000000 转化为十进制后为:

192.168.0.0

通过以上对三组计算机IP地址与子网掩码的AND运算后,我们可以看到它运算结果是一样的。均为192.168.0.0

所以计算机就会把这三台计算机视为是同一子网络,然后进行通讯的。我现在单位使用的代理服务器,内部网络就是这样规划的。

也许你又要问,这样的子网掩码究竟有多少了IP地址可以用呢?你可以这样算。 根据上面我们可以看出,局域网内部的ip地址是我们自己规定的(当然和其他的ip地址是一样的),这个是由子网掩码决定的通过对255.255.255.0的分析。可得出: 前三位IP码由分配下来的数字就只能固定为192.168.0 所以就只剩下了最后的一位了,那么显而易见了,ip地址只能有(2的8次方-1),即256-1=255一般末位为0或者是255的都有其特殊的作用。

那么你可能要问了:如果我的子网掩码不是255.255.255.0呢?你也可以这样宏稿拍做啊假设你的子网掩码是255.255.128.0

那么你的局域网内的ip地址的前两位肯定是固定的了(什么,为什么是固定的?你看上边不就明白了吗?·#¥)

这样,你就可以按照蔽羡下边的计算来看看同一个子网内到底能有多少台机器

1、十进制128 = 二进制1000 0000

2、IP码要敬陵和子网掩码进行AND运算

3、 I P 地址 00010000.01001001.1*******.******** 子网掩码 11111111.11111111.10000000.00000000 AND运算

00010000.01001001.10000000.00000000 转化为十进制后为:

16 . 73 . 128 . 0

4、可知我们内部网可用的IP地址为:

00010000.01001001.10000000.00000000 到 00010000.01001001.11111111.11111111

5、转化为十进制:

16.73.128.0 到 16.73.255.255

6、0和255通常作为网络的内部特殊用途。通常不使用。

7、于是最后的结果如下:我们单位所有可用的IP地址为: 192.168.128.1-192.168.128.254 192.168.129.1-192.168.129.254 192.168.130.1-192.168.130.254 192.168.131.1-192.168.131.254 . . . . . . . . . . . . . 192.168.139.1-192.168.139.254 192.168.140.1-192.168.140.254 192.168.141.1-192.168.141.254 192.168.142.1-192.168.142.254 192.168.143.1-192.168.143.254 . . . . . . . . . . . . . 192.168.254.1-192.168.254.254 192.168.255.1-192.168.255.254

8、总数为(255-128+1)*(254-1+1) =128 * 254 = 32512


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12430277.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存