数制转换以及IP地址的计算问题
2016-11-06 23:29
183 查看
这几天还是有同学一直在问数制转换的问题,所以来这里简单描述一下具体的思路
首先我们来讲二进制和十进制的转换,其实有多种方法,这里我讲我最常用的一种,就是位权法。老师最开始讲的快速的方法也是这个。
我们都知道,二进制就是满二进一,和十进制是类似的。什么是位权呢,位权就是这个里面美一位数字有了值能代表多大的数字,比如十进制,每个位上最大的数字是9,所以位权表示如下:
![](https://img-blog.csdn.net/20161106213848102?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
那么我们想要表示十进制的6542怎么办呢,当然我们知道可以直接向里面添加数字了,但是我们要是按照位权添加是不是就也是一样了呢?由于十进制每个位上都有多个数字值可以表示,所以不便于用位权来表示,但是二进制的数字就不一样了,因为每个位置上只有0和1这两个数字,所以表示的也就是位权的内容,让我们来看一下二进制的位权:
![](https://img-blog.csdn.net/20161106213856915?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
有了位权,我们标志数字在二进制上就容易多了,举个例子,例如表示二进制的22,我们用位权如下图所示
![](https://img-blog.csdn.net/20161106214548796?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
把数字按位权分解,总能得到一个完整的位权相加的结果,所以在用到的位权上用1来标志,用0在未使用的位权上边标识,最后就完成了。
那么十六进制的数字表示也就不复杂了,由于四位二进制可以标志一位十六进制(4位二进制最大数字是15,符合十六进制标准)如十六进制7D3B2H可以表示为:
![](https://img-blog.csdn.net/20161106215413249?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
这样一看其实进制的转换其实也是很简单的,下面的应用会让这个方法更加的有效率。
那么首先来说他们的关系是什么呢?如下图所示,这个就是他们之间的运算关系。
![](https://img-blog.csdn.net/20161106231956132?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
其实很简单对不对,当你得到了IP地址和任何一个地址都可以进行计算,举个例子:
IP:192.123.11.5 子网掩码:255.255.254.0
进行运算,这里交给大家一个办法:
首先把他们都变为二进制地址:
IP:11000000.01111010.00001011.00000101 子网掩码:11111111.11111111.11111110.00000000
把子网掩码1所在的位置在IP中置零,即可得到主机地址:0.0.1.5
把子网掩码中0所在的位置在IP中置零,得到网络地址:192.123.10.0
这个里面的运算和与的运算是等价的,于是乎我们就少了取反的步骤。
一、数制转换与存储空间的运算(二进制有关)
其实在很早的时候我们就有了对于二进制进行计算的概念,但是当时意识还是不够强烈,但是现在做题做的多了感触还是颇深的。首先我们来讲二进制和十进制的转换,其实有多种方法,这里我讲我最常用的一种,就是位权法。老师最开始讲的快速的方法也是这个。
我们都知道,二进制就是满二进一,和十进制是类似的。什么是位权呢,位权就是这个里面美一位数字有了值能代表多大的数字,比如十进制,每个位上最大的数字是9,所以位权表示如下:
那么我们想要表示十进制的6542怎么办呢,当然我们知道可以直接向里面添加数字了,但是我们要是按照位权添加是不是就也是一样了呢?由于十进制每个位上都有多个数字值可以表示,所以不便于用位权来表示,但是二进制的数字就不一样了,因为每个位置上只有0和1这两个数字,所以表示的也就是位权的内容,让我们来看一下二进制的位权:
有了位权,我们标志数字在二进制上就容易多了,举个例子,例如表示二进制的22,我们用位权如下图所示
把数字按位权分解,总能得到一个完整的位权相加的结果,所以在用到的位权上用1来标志,用0在未使用的位权上边标识,最后就完成了。
那么十六进制的数字表示也就不复杂了,由于四位二进制可以标志一位十六进制(4位二进制最大数字是15,符合十六进制标准)如十六进制7D3B2H可以表示为:
这样一看其实进制的转换其实也是很简单的,下面的应用会让这个方法更加的有效率。
二、IP地址的计算
首先我们先要弄清楚IP地址的计算都有什么,首先IP地址有主机地址,子网掩码,网络号和IP地址,他们之间存在着千丝万缕的联系,他们之间只要知道两个是可以计算出其他两个的,这一点很是重要。那么首先来说他们的关系是什么呢?如下图所示,这个就是他们之间的运算关系。
其实很简单对不对,当你得到了IP地址和任何一个地址都可以进行计算,举个例子:
IP:192.123.11.5 子网掩码:255.255.254.0
进行运算,这里交给大家一个办法:
首先把他们都变为二进制地址:
IP:11000000.01111010.00001011.00000101 子网掩码:11111111.11111111.11111110.00000000
把子网掩码1所在的位置在IP中置零,即可得到主机地址:0.0.1.5
把子网掩码中0所在的位置在IP中置零,得到网络地址:192.123.10.0
这个里面的运算和与的运算是等价的,于是乎我们就少了取反的步骤。
相关文章推荐
- SQL SERVER bitmask计算 以及溢出问题
- ssh无密码登录设置方法以及出现问题 ECDSA host key 和IP地址对应的key不同的解决
- win7 64位下自行编译OpenCV2.4.10+CUDA toolkit 5.5的整个过程以及需要注意的问题(opencv+cuda并行计算元素的使用)
- ScrollView嵌套ListView,gridView只显示一行解决方案 (以及计算显示高度错误问题)
- iOS double类型精度问题以及计算问题
- 关于无线数据传输中产生的流量的一些计算方法以及问题!
- Sklearn TFIDF中文计算问题以及解决方法
- aabb的4位平方数问题以及浮点数计算时可能产生的误差
- 队列应用银行排队问题模拟:计算客户的平均停留时间和等待时间以及每个客户的时间信息,两种方法实现
- C#计算代码运行时间,以及总秒数转换为时间格式的问题
- 钢管下料问题用非线性整数规划的数学模型来建模以及用Lingo进行计算
- 大数据的加法、减法、乘法以及阶乘的计算问题
- 素数问题(计算2-100内的素数,以及判断一个数是否为素数)
- win7 64位下自行编译OpenCV2.4.10+CUDA toolkit 5.5的整个过程以及需要注意的问题(opencv+cuda并行计算元素的使用)
- 【计算机网络常见面试题】ip地址同一网段计算问题
- 如何加快数模计算以及如何解决数模计算的收敛性问题
- 大数据的加法、减法、乘法以及阶乘的计算问题(源代码附上)
- 计算连续的IP地址问题
- 有关不同浏览器不同版本的css以及js计算高度的问题
- html中overflow以及元素的height计算问题