怎样快速对二进制和十进制进行互转化——IP地址规划与设计总结
转至:https://blog.csdn.net/erlian1992/article/details/47342189
最近一直在看全国计算机三级网络技术这本书,看到第二章的时候,不免会遇到计算机中最常用的进制转换问题。什么IP地址,什么子网掩码,什么网路地址,什么广播地址都会用到二进制和十进制的相互转化,而且最常用的是8位二进制数一组的转化,这就来总结相互转化最快的方法。
首先来认识标准分类的IP地址:
IP地址是由网络号与主机号组成的,长度是32bit,用点分十进制方法表示,这样就构成了标准分类的IP地址。常用的A类、B类、C类IP地址采用包括“网络号-主机号”两层结构。通常采用x.x.x.x的方式来表示,每个x为8bit,每个x的值为0~255,例如,202.113.29.119。
拿一个图来具体看看五类标准IP地址:
以上可以看出,IP地址的长度为32位二进制数,通常我们把它分为4组,每八位二进制数一组,每组转化为十进制数,每组之间用点来连接,这种方法叫做点分十进制。
比如一个IP地址为:192.168.128.1
写成二进制为:11000000 10101000 10000000 00000001
一,来看看怎么快速转化二进制数11111111:
1)首先应该记住八个十进制数字:128,64,32,16,8,4,2,1。这八个数字肯定是经常用到的,以上八个数字加起来恰好就为255。
2)二进制数11111111每一位对应的数字从左到右恰好是从大到小依次排列:128,64,32,16,8,4,2,1。
3)也就是可以这样对应进行转化相加:
1 1 1 1 1 1 1 1
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 =255
二,再来看其他一些常用十进制数字的转化(反向的必须记住):
1)254:这一看就是255减去1得到,也就是八位二进制数的最后一位置为零。
1 1 1 1 1 1 1 0
128 + 64 + 32 + 16 + 8 + 4 + 2 + 0 =254
2)252:还是用上述的方法进行相减,255减去(1+2)得到,将最后两位置为零。
1 1 1 1 1 1 0 0
128 + 64 + 32 + 16 + 8 + 4 + 0 + 0 =252
3)248:依然用上述的方法进行相减,255减去(1+2+4)得到,将最后三位置为零。
1 1 1 1 1 0 0 0
128 + 64 + 32 + 16 + 8 + 0 + 0 + 0 =248
4)240:通常我们知道(1+2+4+8=15),用255减去15就是240,因此后四位置为零。
1 1 1 1 0 0 0 0
128 + 64 + 32 + 16 + 0 + 0 + 0 + 0 =240
5)224:这个数可以用上述的减去法,也可以用前四位相加得到,看哪一种更加快速的运算得到,将后五位置为零:
1 1 1 0 0 0 0 0
128 + 64 + 32 + 0 + 0 + 0 + 0 + 0 =224
6)192:这个数使我们最为常见的数字,就是128+64得到,只有前两位为1,后六位均为零。
1 1 0 0 0 0 0 0
128 + 64 + 0 + 0 + 0 + 0 + 0 + 0 =192
7)128:这个数我们可以知道就是第一位为1,其余后面的均为零:
1 0 0 0 0 0 0 0
128 + 0 + 0 + 0 + 0 + 0 + 0 + 0 =128
三,再来看一些连续的1和0组成的常用的数字(反向的转化也必须记住):
1)10010000:根据讲到的拆分法进行相加就是128+16=144
2)10101000:拆分法得到128+32+8+168
3)10100000:拆分法得到128+32=160
4)10000001:拆分法得到128+1=129
5)10001000:拆分法得到128+8=136
6)01000000:拆分法得到0+64=64
7)00100000:拆分法得到0+0+32=32
8)00010000:拆分法得到0+0+0+16=16
9)01010000:拆分法得到0+64+0+16=80
其次我们来看划分子网的三级网络结构,增加了一个子网掩码的概念:人们提出了子网掩码或掩码的概念。子网掩码有时叫做子网屏蔽码。掩码的概念同样适用于没有进行子网划分的A类、B类、C类地址。
A类,B类和C类地址掩码:
简单的说,子网掩码就是由连续的1和连续的0组成,不会出现间隔的1和0,1表示网络位,0表示主机位。
来看子网掩码的表示,子网掩码依然是由32位二进制数组成,如果一个B类的网络号从主机位借位7位,由于B类的网络号为16位,加上借位的7位(当做网络位对待),就是23位网络号,那么子网掩码的的表示为:
标准B类地址:11111111 11111111 00000000 00000000
子网掩码地址:11111111 11111111 11111110 00000000(借用主机号7位)
那么转化为点分十进制的子网掩码地址为:255.255.254.0
因此子网号为7的子网掩码示意图:
另外一种的子网掩码的IP地址块表示方法为:网络地址/22(16个网络号+6个借位主机位网络号)
再来看广播地址的概念:在A类、B类、C类IP地址中,如果主机号是全1(二进制),那么这个主机号为广播地址。
简单的来说,网络广播站地址的就是将网络地址中的主机位全部置为零。
来看网络广播地址的表示,如果一个网络地址为195.1.22.64/27的广播地址具有考虑5位的主机号置1。由于64的二进制数为01000000,后5位的主机号置1之后为01011111(为十进制位95),那么网络195.1.22.64/27的广播地址为195.1.22.95。
最后来看CIDR地址聚合方法:
简单来说,就是先将所有的IP地址块写成二进制数,从左向右找出相同的前缀,将他们聚合,相同的前缀不变,主机号全部置为零。
来看一个CIDR聚合的例题:某企业分配给产品部的IP地址块为192.168.31.192/26,分配给市场部的IP地址块为192.168.31.160/27,分配给财务部的IP地址块为192.168.31.128/27,那么这三个地址经过聚合后的地址为多少:
1)首先就是将三个IP地址转换为二进制数:
192.168.31.192 11000000 10101000 00011111 11000000
192.168.31.160 11000000 10101000 00011111 10100000
192.168.31.128 11000000 10101000 00011111 10000000
2)从上述转换为二进制数后找出相同的前缀为24+1=25位,也就是前25位保持不变,将后面的主机号全部置为零,得到11000000 10101000 00011111 10000000
3)将聚合后的地址转化为点分十进制得到:
11000000 10101000 00011111 10000000
192 168 31 128
4)因此聚合后地址为:192.168.31.128/25
以上三类基本上就是网络技术IP地址的规划和设计所考的比较多的题目。
怎样快速对二进制和十进制进行互转化——IP地址规划与设计总结的更多相关文章
- 转:c语言学习笔记 二进制和十进制的互相转化
http://www.cnblogs.com/xkfz007/articles/2590472.html
- js二进制与十进制互转
十进制转换为二进制: var num = 100; console.log(num.toString(2)); toString()方法可把一个 Number 对象转换为一个字符串,并返回结果. 语法 ...
- 【转】C# 二进制,十进制,十六进制 互转
//十进制转二进制 Console.WriteLine(Convert.ToString(69, 2)); //十进制转八进制 Console.WriteLine(Convert.ToString(6 ...
- Java 二进制和十进制互转,二进制和BitSet互转
/** * 二进制转十进制 * * @param binaryNumber * @return */ public static int binaryToDecimal(int binaryNumbe ...
- Unity C#图片转换二进制流、字符串互转
图片转二进制流转换图片互转 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...
- C# 二进制,十进制,十六进制
//十进制转二进制 Console.WriteLine(Convert.ToString(69, 2)); //十进制转八进制 Console.WriteLine(Convert.ToString(6 ...
- c#二进制、十进制、16进制之间的转换
//十进制转二进制 Console.WriteLine(Convert.ToString(69, 2)); //十进制转八进制 Console.WriteLine(Convert.ToString(6 ...
- Python进制转换(二进制、十进制和十六进制)
#!/usr/bin/env python # -*- coding: utf-8 -*- # 2/10/16 base trans. wrote by srcdog on 20th, April, ...
- golang 二进制转十进制实现方式
golang 二进制转十进制实现方式 直接上代码 package main import ( "fmt" "math" ) func StringToIntAr ...
随机推荐
- AOP-基本概念
AOP(概念) 1,什么是AOP (1)面向切面(方面)编程 :利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率. (2)通 ...
- Mac系统U盘制作教程
您可以将外置驱动器或备用宗卷用作安装 Mac 操作系统的启动磁盘. 以下高级步骤主要适用于系统管理员以及熟悉命令行的其他人员.升级 macOS 或重新安装 macOS 不需要可引导安装器,但如果您要在 ...
- 【Azure 应用服务】Azure Mobile App (NodeJS) 的服务端部署在App Service for Windows中出现404 Not Found -- The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
问题描述 使用NodeJS的后端应用,开发一个Mobile App的服务端,手机端通过REST API来访问获取后端数据.在本地编译好后,通过npm start启动项目,访问效果如下: 但是,当把项目 ...
- 将项目上传至GitHub
前言: 前段时间我将自己做的2040小游戏从本地上传至了GitHub上,本篇将记录上传过程与方法 我的2048小游戏GitHub仓库链接226YZY/my2048game: 我的简易2048小游戏 ( ...
- c++17 新特性
编译环境说明:gcc 8.1 + eclipse +windows 10 eclipse cpp默认支持c++14,做c++17开发时,需要手动进行配置. 1.关键字 1)constexpr c++1 ...
- Lesson6——Pandas Pandas描述性统计
1 简介 描述统计学(descriptive statistics)是一门统计学领域的学科,主要研究如何取得反映客观现象的数据,并以图表形式对所搜集的数据进行处理和显示,最终对数据的规律.特征做出综合 ...
- C编译器中“不是所有的控件路径都返回值”报错
编译器的判断逻辑是是否在所有的分支中都返回了值,即if不成立时也必须返回值.编译器认为如果三个if都不成立则此函数可能没有返回值,故报错.需要将第三个if改为else或者去掉if体直接return.
- 当Hobject类型出现内存泄漏爆炸增长的问题,怎么处理
尝试使用get,和set(在拍照之后,调用set,在obj使用前释放资源的思想来完成) HObject Get_inputImage() { return inputImage; } void Set ...
- 「SNOI2017」一个简单的询问
「SNOI2017」一个简单的询问 简单的解法 显然可以差分一下. \[get(l,r,x)\times get(l1,r1,x)=get(1,r,x) \times get(1,r1,x)-get( ...
- Sublime Text4 安装与配置记录
Sublime Text作为一款优质的Code编辑器,已更新至第4个版本,本文记录关于Sublime Text 4[版本4126]的安装.汉化,以及常用配置方法. 安装 访问官网下载安装包:https ...