拜占庭将军问题与CAP

1.拜占庭将军问题

拜占庭位于如今的土耳其的伊斯坦布尔,是东罗马帝国的首都。由于当时拜占庭罗马帝国国土辽阔,为了达到防御目的,每个军队都分隔很远,将军与将军之间只能靠信差传消息。在战争的时候,拜占庭军队内所有将军和副官必须达成一致的共识,决定是否有赢的机会才去攻打敌人的阵营。但是,在军队内有可能存有叛徒和敌军的间谍,左右将军们的决定又扰乱整体军队的秩序。在进行共识时,结果并不代表大多数人的意见。这时候,在已知有成员谋反的情况下,其余忠诚的将军在不受叛徒的影响下如何达成一致的协议,拜占庭问题就此形成

拜占庭将军问题(Byzantine failures),是由莱斯利·兰伯特提出的点对点通信中的基本问题。含义是在存在消息丢失的不可靠信道上试图通过消息传递的方式达到一致性是不可能的。
“拜占庭将军问题”延伸到互联网生活中来,其内涵可概括为:在互联网大背景下,当需要与不熟悉的对方进行价值交换活动时,人们如何才能防止不会被其中的恶意破坏者欺骗、迷惑从而作出错误的决策。进一步将“拜占庭将军问题”延伸到技术领域中来,其内涵可概括为:在缺少可信任的中央节点和可信任的通道的情况下,分布在网络中的各个节点应如何达成共识。拜占庭假设是对现实世界的模型化,由于硬件错误、网络拥塞或断开以及遭到恶意攻击,计算机和网络可能出现不可预料的行为。

解决方法:

(1)口信消息型拜占庭问题之解

兰伯特在论文《The Byzantine Generals Problem》中提到的口信消息型拜占庭问题之解:如果叛将人数为 m,将军人数不能少于 3m + 1 ,那么拜占庭将军问题就能解决了。
这个算法有个前提,也就是叛将人数 m,或者说能容忍的叛将数 m,是已知的。在这个算法中,叛将数 m 决定递归循环的次数(也就是说,叛将数 m 决定将军们要进行多少轮作战信息协商),即 m+1 轮(所以,你看,只有楚是叛变的,那么就进行了两轮)。你也可以从另外一个角度理解:n 位将军,最多能容忍 (n - 1) / 3 位叛将。
拜占庭将军问题:有叛徒的情况下,如何才能达成共识?

(2)签名消息型拜占庭问题之解

这个解决办法,是兰伯特在论文中提到的签名消息型拜占庭问题之解。而通过签名机制约束叛将的叛变行为,任何叛变行为都会被发现,也就会实现无论有多少忠诚的将军和多少叛将,忠诚的将军们总能达成一致的作战计划。

2.CAP指标

2.1CAP理论

(1)一致性(Consistency)

概述:
一致性这个指标,描述的是分布式系统非常重要的一个特性,强调的是数据的一致。也就是说,在客户端看来,集群和单机在数据一致性上是一样的。
一致性的局限性:
不过集群毕竟不是单机,当发生分区故障的时候,有时不能仅仅因为节点间出现了通讯问题,节点中的数据会不一致,就拒绝写入新数据,之后在客户端查询数据时,就一直返回给客户端出错信息。这句话怎么理解呢?我来举个例子。业务集群中的一些关键系统,比如名字路由系统,如果仅仅因为发生了分布故障,节点中的数据会不一致,集群就拒绝写入新的路由信息,之后,当客户端查询相关路由信息时,系统就一直返回给客户端出错信息,那么相关的服务都将因为获取不到指定路由信息而不可用、瘫痪,这可以说是灾难性的故障了。

(2)可用性(Availability)

可用性说的是任何来自客户端的请求,不管访问哪个节点,都能得到响应数据,但不保证是同一份最新数据。你也可以把可用性看作是分布式系统对访问本系统的客户端的另外一种承诺:我尽力给你返回数据,不会不响应你,但是我不保证每个节点给你的数据都是最新的。这个指标强调的是服务可用,但不保证数据的一致。

(3)分区容错性(Partition Tolerance)

分区容错性说的是,当节点间出现任意数量的消息丢失或高延迟的时候,系统仍然可以继续提供服务。也就是说,分布式系统在告诉访问本系统的客户端:不管我的内部出现什么样的数据同步问题,我会一直运行,提供服务。这个指标,强调的是集群对分区故障的容错能力。

2.2CAP 不可能三角

CAP 不可能三角说的是对于一个分布式系统而言,一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)3 个指标不可兼得,只能在 3 个指标中选择 2 个。
image.png
我们都知道,只要有网络交互就一定会有延迟和数据丢失,而这种状况我们必须接受,还必须保证系统不能挂掉。所以就像我上面提到的,节点间的分区故障是必然发生的。也就是说,分区容错性(P)是前提,是必须要保证的。

现在就只剩下一致性(C)和可用性(A)可以选择了:要么选择一致性,保证数据绝对一致;要么选择可用性,保证服务可用。那么 CP 和 AP 的含义是什么呢? 当选择了一致性(C)的时候,如果因为消息丢失、延迟过高发生了网络分区,部分节点无法保证特定信息是最新的,那么这个时候,当集群节点接收到来自客户端的写请求时,因为无法保证所有节点都是最新信息,所以系统将返回写失败错误,也就是说集群 拒绝新数据写入。当选择了可用性(A)的时候,系统将始终处理客户端的查询,返回特定信息,如果发生 了网络分区,一些节点将无法返回最新的特定信息,它们将返回自己当前的相对新的信息。

本文转载于网络 如有侵权请联系删除

相关文章

  • 前端测试题:(解析)关于ajax跨域的说法,下面错误的是?

    考核内容:ajax跨域异步操作数据题发散度:★★试题难度:★★解题思路:Ajax的全称是AsynchronousJavaScriptandXMLAjax是什么?答:Ajax是一种可以在浏览器和服务器之间使用异步数据传输(HTTP请求)的技术。使用它可以让页面请求少量的数据,而不用刷新整个页面。而传统的页面(不使用Ajax)要刷新部分内容,必须重载整个网页页面。Ajax基于什么?答:它基于的是XMLHttpRequest(XHR)。这是一个比较粗糙的API,不符合关注分离的设计原则(SeparationofConcerns),配置和使用都不是那么友好。$.ajax的产生背景?答:基于上面的原因,各种ajax库引用而生,然而最有名的就是jQuery的API中的.ajax()。.ajax()它的一个优势异步操作,但jQuery的异步操作是基于事件的异步模型,没有promise那么友好。fetch产生的背景?答:综合上面所讲的各种因素,fetch这个api应运而生。fetch接口是用来解决Ajax(xhr)在写法和调用上的不合理和开放的js接口,Fetch是浏览器提供的原生AJAX接口。使用w

  • Windows下的Maven安装与配置【附Idea设置默认】

    Maven是一个项目管理和综合工具。Maven提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。以上摘自网上 不废话了,进入正题。Maven可以方便的为我们自动管理各种包,或者其它一些工具建设。步骤下载官网下载地址:http://maven.apache.org/download.cgi我们下载Binaryziparchive(二进制压缩归档文件)下载完成:解压我们下载的是压缩归档文件,不用安装,解压即可。我这里将其解压到了F盘:F:\Maven3.6.2环境变量配置Win10可以直接搜索“环境变量”打开配置界面:其他用户请:计算机右键→属性→高级系统设置→环境变量 A.我们需要在系统变量新建两个变量M2_HOME和MAVEN_HOME,值为安装路径;M2_HOME=F:\Maven3.6.2 MAVEN_HOM

  • Android声音和亮度设置

    声音设置调整手机的各种音量可以通过AudioManager这个类来操作注:安卓手机各种音量的最大数值不一样,请通过下面具体的方法获取最大音量值。涉及的参数说明: streamType类型:(音量类型)STREAM_ALARM提示音STREAM_MUSIC音乐音量即多媒体音量STREAM_NOTIFICATION窗口顶部状态栏Notification,STREAM_RING铃声STREAM_SYSTEM系统STREAM_VOICE_CALL通话STREAM_DTMF双音多频不过三方的Rom中这些类型可能是多对一的也就是多种类型调节的是同一种flags参数:(下面是常用的几个)FLAG_PLAY_SOUND调整音量时播放声音FLAG_SHOW_UI调整时显示系统的音量进度条0表示什么都不做工具类importandroid.content.Context; importandroid.media.AudioManager; publicclassZJAudioUtil{ privateAudioManagermAudioManager; privatestaticZJAudioUtilm

  • SQL反模式学习笔记17 全文搜索

    目标:全文搜索使用SQL搜索关键字,同时保证快速和精确,依旧是相当地困难。SQL的一个基本原理(以及SQL所继承的关系原理)就是一列中的单个数据是原子性的。反模式:模式匹配使用Like或者正则表达式。  缺点:(1)无法使用索引,进行全表遍历,非常耗时,性能极低。     (2)有时候会返回医疗之外的结果。select*frombugswheredescriptionlike'%one%',返回结果可能是money、prone、lonely。正则表达式可能会为单词边界提供一个模式来解决单词的匹配问题。如何识别反模式:当出现以下情况时,可能是反模式  1、如何在like表达式的2个通配符之间插入一个变量?  2、如何写一个正则表达式来检查一个字符串是否包含多个单词、不包含一个特定的单词,或者包含给定单词的任意形式?  3、网站的搜索功能在增加了很多文档进去之后慢的不可理喻。合理使用反模式:  1、性能总是最重要的,如果一些查询过程很少执行,就不必要花很多功夫去对它进行优化  2、使用模式匹配操作进行很复杂的查询是很困难的,但是如果你为了一些简单的需求设计这样的模式匹配

  • 从这个玩转图片水印的“神应用”,看懂生成对抗网络的前世今生

    导读:当前互联网飞速发展,越来越多的公司、组织和个人都选择在网上展示和分享图像。为了保护图像版权,大家都会选择在图像上打上透明或者半透明的水印。随着水印被广泛地使用,针对水印的各种处理技术也在不断发展,如何有效去除图像上的水印引发了越来越多人的研究兴趣。在《AI技术神应用:这些有“问题”的图片,我们一眼看穿!》一文中,我们已经介绍了如何利用全卷积神经网络来设计一个水印去除器。在今天的文章中,我们会介绍一种更为强大的水印去除器。这次我们借助生成对抗网络来实现,进一步提升水印去除器的性能,从而达到更为理想的去除效果。作者:李翔来源:视说AI(ID:techtalkai)01生成对抗网络的前世今生生成对抗网络(GenerativeAdversarialNetworks,GAN),是由IanGoodfellow等人在2014年首次提出。一般来说,生成对抗网络由两部分组成:生成器(Generator)和判别器(Discriminator)。生成器通过接收输入数据,学习训练数据的分布来生成目标数据。判别器通常是一个二分类模型,用来判别生成器生成数据的真假性。我们可以将生成器和判别器看作互相对抗的双

  • Spark Shuffle在网易的优化

    5万人关注的大数据成神之路,不来了解一下吗?5万人关注的大数据成神之路,真的不来了解一下吗?5万人关注的大数据成神之路,确定真的不来了解一下吗?欢迎您关注《大数据成神之路》本文结构Background前言CanFetch描述优化方案相关链接FetchEfficiently描述优化方案相关链接ReliableFetchShuffleWritePhaseShuffleReadPhase描述优化方案性能测试相关链接 Background本文讲在网易工作将近一年来关于SparkShuffle方面所做的三点优化。前言Spark是目前主流的大数据计算引擎,而Shuffle操作是Spark计算中的的核心操作,也往往是瓶颈所在。首先简单介绍下Shuffle操作。如下图所示.map端负责对数据进行重新分区(ShuffleWrite),可能有排序操作,而reduce端拉取数据各个mapper对应分区的数据(ShuffleRead),然后对这些数据进行计算。Shuffle过程中伴随着大量的数据传输。在大数据生产环境中,数据规模日益增长,数据量大了什么事情都有可能发生,可能会产生各种各样的问题,而大多数问题

  • 如何为回归问题选择最合适的机器学习方法?

    作者|何从庆本文经授权转载自AI算法之心(id:AIHeartForYou)在目前的机器学习领域中,最常见的三种任务就是:回归分析、分类分析、聚类分析。在之前的文章中,我曾写过一篇《15分钟带你入门sklearn与机器学习——分类算法篇》。那么什么是回归呢?回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。回归分析在机器学习领域应用非常广泛,例如,商品的销量预测问题,交通流量预测问题。那么,如何为这些回归问题选择最合适的机器学习算法呢?这篇文章将从以下一个方面介绍: 常用的回归算法回归竞赛问题以及解决方案正在进行中的回归竞赛问题常用的回归算法这里介绍一些回归问题中常用的机器学习方法,sklearn作为机器学习中一个强大的算法包,内置了许多经典的回归算法,下面将一一介绍各个算法:注:下面回归算法的代码已上传至网盘,如果有小伙伴感兴趣,欢迎关注"AI算法之心",后台回复"回归算法"。1、线性回归线性回归拟合一个带系数的线性模型,以最小化数据中的观测值与线性预测值之间的残差平方和。sklearn中也存在线性回归的算法

  • 学生信息管理系统验收总结

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/9831407       学生信息管理系统(VB版)开工已有半个多月,如今已经验收完毕。在刚开始无从下手到第一次验收,再到修复bug,进行不断的优化,一直优化到现在的状态,无论是从思想上,还是从技术上,都获得了一次飞跃的成长。      还记得刚做完的时候,晓洁师姐给出的第一句评价就是:没有全局观。后来反思了很久,自己的确在这方面吃了大亏,刚做系统的时候没有计划,闷头瞎做,期间不知碰破了多少次头,费的功夫和力气倒不少。      真正验收时,错误百出:比较低级的错误:      (1)、粗心导致代码中一些字符的错误,比如中英文字符混淆、某个不起眼符号的遗漏等语句错误,甚至还有一些语句遗漏、颠倒等语法错误。出现这些错误时,应该不骄不躁,学会心平气和,设个断点、用F8调试一下就会解决。      (2)、没有考虑删除数据库中最后一条记录出现的情况,导致报错。因为整个系统中几乎所有的窗体都调用了viewData(

  • 【周末分享】哈佛女校长毕业典礼讲话:职业选择与幸福寻找

    在这所久负盛名的大学的别具一格的仪式上,我站在了你们的面前,被期待着给予一些蕴含着恒久智慧的言论。站在这个讲坛上,我穿得像个清教徒教长——一个可能会吓到我的杰出前辈们的怪物,或许使他们中的一些人重新致力于铲除巫婆的事业上。这个时刻也许曾激励了很多清教徒成为教长。但现在,我在上面,你们在下面,此时此刻,属于真理,为了真理。你们已经在哈佛做了四年的大学生,而我当哈佛校长还不到一年。你们认识了三个校长,而我只认识了你们这一届大四的。算起来我哪有资格说什么经验之谈?或许应该由你们上来展示一下智慧。要不我们换换位置?然后我就可以像哈佛法学院的学生那样,在接下来的一个小时内不时地冷不防地提出问题。学校和学生们似乎都在努力让时间来到这一时刻,而且还差不多是步调一致的。我这两天才得知哈佛从5月22日开始就不向你们提供伙食了。虽然有比喻说“我们早晚得给你们断奶”,但没想到我们的后勤还真的早早就把“奶”给断了。现在还是让我们回到我刚才提到的提问题的事上吧。让我们设想下这是个哈佛大学给本科生的毕业服务,是以问答的形式。你们将问些问题,比如:“福校长啊,人生的价值是什么呢?我们上这大学四年是为了什么呢?福校长

  • 如何修改CLion新建C++头文件模板中#ifndef后面的默认值

    问题描述 当我在CLion中新建一个C++Class或者C/C++HeaderFile时,它为我们自动添加 #ifndefPROJECTNAME_FILENAME_H #definePROJECTNAME_FILENAME_H /*...code...*/ #endif//PROJECTNAME_FILENAME_H 复制 现在,我想把PROJECTNAME换成文件相对路径,因为这更符合Hotspot中习惯 INCLUDE_GUARD 打开Settings/Preferences|Editor|FileandCodeTemplates并且打开Files标签页,从列表中选中C++HeaderFile或者CHeaderFile 因此,有时候也会提问“如果改变CLion中的INCLUDE_GUARDS?” 修改命名习惯 打开Settings/Preferences|Editor|CodeStyle|C/C++,并且切换到NamingConvention标签页: 修改HeaderGuardStyle为 ${PROJECT_REL_PATH}_${FILE_NAME}_${EXT} 复制

  • 消息抽象层设计和实现-OSS.DataFlow

      前面已经介绍了消息生产消费中间类库(OSS.DataFlow)的简单使用,这篇主要介绍内部的设计实现。主要内容包含:   1.消息生产消费的抽象设计。   2.具体使用示例 一. 消息生产消费的抽象设计。   需要首先强调的是,这里的生产消费抽象主要在业务使用层面,抛开具体的RabbitMQ之类的消息队列产品。可能说起来比较模糊,我们先看下常见的业务调用消息队列的情况:   上边是一个常见的通过消息队列将业务异步拆解的模型,按道理结构已经十分简单了,特别是对于一个相对稳定的业务,代码基本变动不大的情况下,这个模型基本足够了。不过对于一个爱折腾的开发人,不玩点花里胡哨的,存在感就没了,经过各种假设论证之后,终于找到了这么几个不满意的地方:     1. 开发,测试,生产,都需要搭建对应的Rabbit实例,特别是开发测试环境抢消息,再加上多人开发,大麻烦可能没有,但小麻烦一定是不断的。   2. 业务代码中,直接调用了具体消息队列的产品,当某一个模块消息量快速上升,无法局部切换队列产品。(当然你也可以切分出独立的服务,但是耗时,代价相对较大

  • IDEA自动生成TestNG的testng.xml的插件

      某地方见到的,自己实际操作一遍,记录一下。方便以后查询。 下载CreateTestNGXML插件,重启IDEA即可。 重启idea,新建Maven项目。 pom.xml增加依赖 <dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>6.10</version></dependency>复制 产生testng.xml文件 有兴趣的同学,可以尝试一下。

  • 浅谈html5网页内嵌视频

    更好的阅读体验:浅谈html5网页内嵌视频 如今在这个特殊的时代下:flash将死未死,微软和IE的历史问题,html5标准未定,苹果和谷歌的闭源和开源之争,移动互联网的大势所趋,浏览器各自为战...这些都导致web开发者在设计视频解决方案的时候相当困惑。本文围绕这个主题,来探讨一下相关的技术,原理和工具。   编码与格式的误区 很多人将编码和格式误认为是同一个东西,往往以视频文件的后缀来唯一确定视频文件的支持程度。而事实上,用一句话来概括就是:视频的文件后缀(假设没有恶意修改后缀)实际上代表一种封装格式,而视频或者音频的编码算法与封装格式本身无直接的关系:同样的封装格式(即同样的后缀)可以封装不同编码算法的视频和音频。而视频播放设备或软件是否支持视频的播放,不仅仅要看封装格式,还要看编码算法。认清这一点是理解和排查问题的基础。 封装格式规定了视频的所有内容,包括图像,声音,字幕,系统控制等,其中以图像和声音最为关键。   从MPEG说起 MPEG是一个定义视频规格的国际组织,他们曾经推出的MPEG-1和MPEG-2实际上分别就是大家熟知的VCD和DVD,不过这都是

  • 「考试」省选82

    T1 博弈论+分类讨论。 首先单个连通块的胜负情况由其点数决定,是个必然\(Bob\)胜利,否则\(Alan\)胜利。 证明: 一个点的时候\(Alan\)胜利。 两个点的时候\(Bob\)胜利。 奇数点的时候必然可以找到叶子的父亲让\(Alan\)将其覆盖,这样的话最后一个一定是\(Alan\)放置的。 如果\(Bob\)切树,必然有一个连通块是奇数个,那么最终会递归到\(1\)的情况。 考虑一个\(\geq4\)的长度为偶数的链,\(Alan\)占据一个端点的时候,\(Bob\)必然占据其旁边的一个点。 链相当于去掉了\(3\)个点,递归到奇数情况,\(Alan\)胜利。 非链情况考虑必然存在一个点是最深的分叉点,如果有一个儿子并非叶子,那么必然可以染色这个儿子包含的叶子,这样子就可以使得\(Bob\)染色其父亲,这样相当于去掉了三个点,递归到奇数情况,\(Alan\)胜利。 如果其所有儿子都是叶子,那么占据这个点,\(Bob\)必然选择某一个叶子,这时候总有一个儿子只能被\(Alan\)染色,\(Alan\)胜利。 所以我们只需要考虑树上是否存在一个完美匹配。 T2 枚举一个维度

  • 结队-词频统计-项目进度

    读取文件,输出每个文件的词频,统计单个文档的词频统计

  • oracle查看某表字段类型

    来源:https://www.cnblogs.com/ufindme/p/5033843.html 今天遇到一个问题:要求在可重复执行的SQL脚本添加一段SQL代码:修改当前的数据类型。因为SQL代码放在重复执行的脚本中,那须考虑到数据类型满足条件时则不进行修改。一时不知道怎么解决。然后就搜索出上面链接的博文。最后解决了。 --如果当前字段不是varchar2(64)类型的则执行 promptmodifycolumns_namefortemp.your_table_name...... declare v_rowcountinteger; begin selectcount(*)intov_rowcountfromdualwhereexists( selectt.*fromUser_Tab_Columnst wheretable_name=upper('your_table_name') andt.COLUMN_NAME=upper('columns_name') andt.DATA_TYPE='VARCHAR2' andt.DATA_LENGTH<64); ifv_rowco

  • Vue习惯打开卡练习

          <!DOCTYPEhtml> <htmllang="en"> <head> <metacharset="UTF-8"> <metahttp-equiv="X-UA-Compatible"content="IE=edge"> <metaname="viewport"content="width=device-width,initial-scale=1.0"> <title>习惯打卡</title> <style> h3{ color:#666; text-indent:2px; } .input{ width:98%; border-radius:4px; height:35px; border:0; background-color:#eee; padding:2px5px; color:#666; } .list{ list-style-type:none; margin:10px0; padding:0; } .listli{ p

  • jquery 弹窗信息显示几秒后自动消失

    CSS样式:复制 alert{ display:none; position:fixed; top:50%; left:50%; min-width:300px; max-width:600px; transform:translate(-50%,-50%); z-index:99999; text-align:center; padding:15px; border-radius:3px; } .alert-success{ color:#3c763d; background-color:#dff0d8; border-color:#d6e9c6; } .alert-info{ color:#31708f; background-color:#d9edf7; border-color:#bce8f1; } .alert-warning{ color:#8a6d3b; background-color:#fcf8e3; border-color:#faebcc; } .alert-danger{ color:#a94442; background-color:#f2dede;

  • Mac系统安装Photoshop CS6教程

    1、下载Photoshop安装软件及破解程序:到Adobe官网下载photoshopcs6安装包(https://helpx.adobe.com/cn/x-productkb/policy-pricing/cs6-product-downloads.html)  破解程序可百度查找。 ​ 2、断开网络:因为Photoshop安装过程中会要求登录AdobeID的,没有AdobeID的还需要注册,为免麻烦并加快安装进度,我们最好先断开网络,让安装程序跳过这一步操作。 ​ 3、安装步骤: 第一步:双击下载完成的PhotoShopdmg程序开始安装,在弹出页会有四个选项,第一个为存放Photoshop安装文件的文件夹,其他三个为帮助文档。双击第一个进入安装文件夹。 ​ 第二步:  启动安装程序:在文件夹内会看到真正的安装程序入口--install,双击它进行安装。 ​            双击之后,会弹出一个警告框,点击打开 ​ &n

  • windows 安装nvm步骤(shi&#39;yongnvm-windows管理node版本):

    p.p1{margin:0;font:11pxHelvetica;-webkit-text-stroke:#000000} p.p2{margin:0;font:11pxHelvetica;-webkit-text-stroke:#000000;min-height:13px} span.s1{font-kerning:none}     瞎几把前言:mac上可以用n来管理node版本,私以为n很好用。家里的win7台式机一直没有安装过任何管理工具,今天来给家里电脑安装一下nvw-windows,一个用于windows系统的node版本工具。   电脑系统:系统win764位:   nvw-windows的官网:https://github.com/coreybutler/nvm-windows/releases   一、安装步骤: (一)下载: 首先从官网下载安装包https://github.com/coreybutler/nvm-windows/releases,我下了一个setup版本的,下下来是个压缩包,解压后里面是一个exe

  • 各种进位制转换

    在数字后面加上不同的字母来表示不同的进位制。B(Binary)表示二进制,O(Octal)表示八进制,D(Decimal)或不加表示十进制,H(Hexadecimal)表示十六进制。 例如:(101011)B=(53)O=(43)D=(2B)H 二进制→十进制   方法:二进制数从低位到高位(即从右往左)计算,第0位的权值是2的0次方,第1位的权值是2的1次方,第2位的权值是2的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。   例:将二进制的(101011)B转换为十进制的步骤如下: 1.第0位1x2^0=1; 2.第1位1x2^1=2; 3.第2位0x2^2=0; 4.第3位1x2^3=8; 5.第4位0x2^4=0; 6.第5位1x2^5=32; 7.读数,把结果值相加,1+2+0+8+0+32=43,即(101011)B=(43)D。 八进制→十进制 方法:八进制数从低位到高位(即从右往左)计算,第0位的权值是8的0次方,第1位的权值是8的1次方,第2位的权值是8的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。   八进制就是逢8进1,八进制数采

相关推荐

推荐阅读