ip地址取值为什么是0~255 而不是0~127 第一位不应该是符号位吗?


不是有符号整数,跟整数编码没关系,就是简单的2进位编码

IPv4由32位二进位组成,平均分为4段,每段8位,中间用点隔开,用十进位表示,称为点分十进位。(每段的范围都是0-255)

IPv4分为五类

A类范围:1-126

B类范围:128-191 C类范围:192-223 D类组播地址 E类用于科研A类地址:第1个8位组为网路部分,其余3个8位组为主机部分 B类地址:前2个8位组为网路部分,后2个8位组为主机部分 C类地址:前3个8位组为网路部分,最后一个8位组为主机部分A/B/C地址用于网路通讯

127网段称为本地回环地址,用于测试TCP/IP协议的正确性

ping→127.0.0.1

→127.127.127.127只要是127开始,都是检测tcp/ip协议的正确性。
这个问题有意思~这么解释吧,符号只在数字运算的时候有意义。而IP地址是一个类似于标识符一样的东西,只是作为一个设备,终端,介面等等的三层地址标记使用,不会用做运算。所以对IP地址来说,有意义的只有能标记的数字多少,而非符号。-128-127共256个数字0-255也是256个数字

两者表示方法可以表示的IP地址的数量都是256个,可以给256台设备去使用,没有本质区别。只是大家惯用了0-256的表示方法,约定俗成了而已。


最初设计互联网路时,为了便于定址以及层次化构造网路,每个IP地址包括两个标识码(ID),即网路ID和主机ID。同一个物理网路上的所有主机都使用同一个网路ID,网路上的一个主机(包括网路上工作站,伺服器和路由器等)有一个主机ID与其对应。Internet委员会定义了5种IP地址类型以适合不同容量的网路,即A类~E类。

其中A、B、C3类(如下表格)由InternetNIC在全球范围内统一分配,D、E类为特殊地址。(来自百度百科)

其次 因为任何的电脑 交换机 路由器 其实都是一台专用的计算机 它的内部都是运行开与关 与 或 非的逻辑门电路

网路设计之初 因为没考虑到后来的计算机发展会这么快 会发明手机等等占用大量ip地址的设备

因此以当时的计算机占用量预估计 2的32三次方个地址(因为是二进位)就足够用了

所以 将32个二进位的地址 用点分十进位来划分就是每8个为一组 每一个八位组 从8个零00000000到8个11111111 再转换为十进位就是0到255 点分后的每一小块有255加0共个256个地址 理想 不区分的情况下 如果全部为1就是 255.255.255.255

一开始的百度百科说了为什么要做ip的网段划分 然后如果没有东西去区分界定 给任何一个ip谁知道它是什么网段的 于是提出了网段和地址的概念

规定A类地址第一个八位组为网路位 其他为主机位 B类地址前两个八位组为网路位 后边为主机位 后边一次类推

然后将整个32和位的地址 通过前面两个位置0或置1(因为是二进位)要表示A B C D E 五个网段 所以需要2的2次方加0一共5个不同的位来区分网段的范围)

然后再配合网路位和主机位 比如A类地址 最大表示范围是11111111八个1 如果第一个为0就剩七个1就2得7次方128 然后这里的128要减1

因为我们在算的时候以2的n次方来算 但是我们看到的的结果是要将比如置0位后的0111111八位二进位数 转换为十进位ip地址后得来的 2的n次方的结果和把它转换为十进位有差别 之间相差1 这里是存在一个数学关系 好像有一个公式 忘记了 这样理解吧

而它的本质是 计算机不知道有符号和无符号 它没有那么智能 如果我们要置位 要让计算机理解置位 就必须把置位看做符号位

那么我们将任何一个n位数从中间砍成两半 比如八位 如果用16进位来理解 人看二进位太累 一个16进位数等于4个二进位位

所以从0到256用16进位表示分别是

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 0100 1011 1100 1101 1110 1111

然后习惯上 我们把正数放在开始 后边负数 又习惯从0开始说 所以 用符号位为0表示正数 1表示负数 看看上边的二进位数 开始第一个位是不是从0开始的都是0 所以范围就是+127~-127 所以0-127就是这么来的 就是它的网路位 所以A类地址就是 0.0.0.0-127.255.255.255 后边依次类推

所以你说的0-127是在网路位产生的 第一个二进位位 被置位来区分不同类别网段得到的 而255是主机位的八位二进位 不存在置位所以是0-8换为十进位就是0-255 所以是这样来的

没有任何资料规定二进位数第一位必须是符号位


就是想问 ip不是点分十进位吗 换算二进位是00000000-11111111 但是之前学计算机的时候是说 第一位是代表符号 就是-128~127 为什么ip的二进位的第一位不是符号而是直接转换成十进位的呢


推荐阅读:
相关文章