精华内容
下载资源
问答
  • 二进制相加进位

    千次阅读 2018-04-06 12:13:37
    题目: 有两个字符串里面仅包含二进制,然后让两个字符串内的二进制数字从右往左相加进位得到结果.例如:a=”11”,b=”1” 结果是c=”100”,a中最右侧的1与b中的1相加得2,2的二进制是10,在此位保留一个0,1作为进位, 在...

    题目: 
    有两个字符串里面仅包含二进制,然后让两个字符串内的二进制数字从右往左相加进位得到结果.

    例如:a=”11”,b=”1” 结果是c=”100”,a中最右侧的1与b中的1相加得2,2的二进制是10,在此位保留一个0,1作为进位, 在a中右侧的倒数第二个1与进位1相加得2,2的二进制是10,此位保留一个0,由于左侧没有数字的,把进位追加到左侧.

    例如 a=”11”,b=”11” 结果是c=”110” 
    例如 a=”111”,b=”111” 结果是c=”1100” 
    例如 a=”1111”,b=”1111” 结果是c=”11110” 

    例如 a=”1010”,b=”11” 结果是c=”1101”


    思路是逢二进一。


    二进制数与十进制数一样,同样可以进行加、减、乘、除四则运算。其算法规则如下:
    加运算:0+0=0,0+1=1,1+0=1,1+1=10。逢2进1;
    减运算:1-1=0,1-0=1,0-0=0,0-1=-1,10100-1010=1010。向高位借1当2;
    乘运算:0×0=0,0×1=0,1×0=0,1×1=1。只有同时为“1”时结果才为“1”;
    除运算:0÷1=0,1÷1=1。二进制数只有两个数(0,1),因此它的商是1或0。
    只有0和1两个数码, 基数为二。

    C#代码二进制数相加:

    public static void main(String[] args) {
    
       String a = "1111";
       String b = "1111";
       String result = getCarryResult(a, b);
       System.out.println(result);
    }
    
    private static String getCarryResult(String a, String b) {
       StringBuilder sb = new StringBuilder();
       int aIndex = a.length() - 1;
       int bIndex = b.length() - 1;
       int carry = 0;
       while (!(aIndex == -1 && bIndex == -1)) {
           int aResult = aIndex >= 0 ? (a.charAt(aIndex--) - '0') : 0;
           int bResult = bIndex >= 0 ? (b.charAt(bIndex--) - '0') : 0;
           int result = aResult + bResult + carry;
           carry = result >= 2 ? 1 : 0;
           sb.append((result & 0x1) == 1 ? 1 : 0);
       }
       sb.append(carry == 0 ? "" : carry);
       return sb.reverse().toString();
    }

    展开全文
  • 二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,
  • 二进制

    千次阅读 2019-09-21 19:55:33
    进位规则十进一 二进一 位权 一个数码在不同的位置上所代表的值不同 2、二进制怎么表述一个数 10进制 -8329666 10进制 8 3 2 9 6 6 6 2进制 1000 0011 0010 1001 0110 1000 是2的3次方 0011 最后一个1是2的0...

    进制转换

    1、什么是二进制

    十进制 0-9 二进制 0 1表述

    进位规则十进一 二进一

    位权 一个数码在不同的位置上所代表的值不同

    2、二进制怎么表述一个数

    10进制 -8329666

    10进制 8 3  2 9 6 6 6

    2进制 1000 0011 0010 1001 0110

    1000 是2的3次方 0011 最后一个1是2的0次方+ 倒数第二个1是2的1次方 后面的以此类推

    二进制的表示用法57进行说明

    才有科学计数法 按权展开

    111001-----

    1*2^(6-1)+1*2^(5-1)+1*2^(4-1)+0*2^(3-1)+0*2(2-1)+2^(1-1)=32+16+8+0+0+1=57

     

     

    十进制转二进制 采用短除2

     

    除法 商 余数

    2|57 28 1

    2|28 14 0

    2|14 7 0

    2|7 3 1

    2|3 1 1

    2|1 0 1

     

    111001

     

     

    3、计算机为什么要用二进制

    二进制

    计算机内部采用二进制 运算简单 简化了计算机结构

     

    其它进制

    八进制 适用于12位和36位的计算器系统 (2的3次方)

    标志的开头用0表示 用0-7的数字表示

    16进制 用0-9 A B C D E F (2的4次方)

    表示表达长度短 变得更常用 标志的开头用0x表示

     

     

     

     

    展开全文
  • 它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。—— 百度百科二进制数据就像上图一样,由0和1来存储数据。普通的十进制数转化成二进制数一般采用"除2取余,...

    1 认识二进制数据

    二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。

    —— 百度百科

    二进制数据就像上图一样,由0和1来存储数据。普通的十进制数转化成二进制数一般采用"除2取余,逆序排列"法,用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。例如,数字10转成二进制就是1010,那么数字10在计算机中就以1010的形式存储。

    而字母和一些符号则需要通过 ASCII 码来对应,例如,字母a对应的 ACSII 码是 97,二进制表示就是0110 0001。JavaScript 中可以使用 charCodeAt 方法获取字符对应的 ASCII:

    b69b4bd10cb6e46634f242d6a54dca0a.png

    除了ASCII外,还有一些其他的编码方式来映射不同字符,比如我们使用的汉字,通过 JavaScript 的 charCodeAt 方法得到的是其 UTF-16 的编码。

    a81f52d45a114d3270421c6c9ba3d40f.png

    Node 处理二进制数据

    JavaScript 在诞生初期主要用于表单信息的处理,所以 JavaScript 天生擅长对字符串进行处理,可以看到 String 的原型提供特别多便利的字符串操作方式。

    b0b17270f269bcb4df1f4b3ca59f14d9.png

    但是,在服务端如果只能操作字符是远远不够的,特别是网络和文件的一些 IO 操作上,还需要支持二进制数据流的操作,而 Node.js 的 Buffer 就是为了支持这些而存在的。好在 ES6 发布后,引入了类型数组(TypedArray)的概念,又逐步补充了二进制数据处理的能力,现在在 Node.js 中也可以直接使用,但是在 Node.js 中,还是 Buffer 更加适合二进制数据的处理,而且拥有更优的性能,当然 Buffer 也可以直接看做 TypedArray 中的 Uint8Array。除了 Buffer,Node.js 中还提供了 stream 接口,主要用于处理大文件的 IO 操作,相对于将文件分批分片进行处理。

    2 认识 Buffer

    Buffer 直译成中文是『缓冲区』的意思,顾名思义,在 Node.js 中实例化的 Buffer 也是专门用来存放二进制数据的缓冲区。一个 Buffer 可以理解成开辟的一块内存区域,Buffer 的大小就是开辟的内存区域的大小。下面来看看Buffer 的基本使用方法。

    API 简介

    早期的 Buffer 通过构造函数进行创建,通过不同的参数分配不同的 Buffer。

    new Buffer(size)

    创建大小为 size(number) 的 Buffer。

    new Buffer(5)// 

    new Buffer(array)

    使用八位字节数组 array 分配一个新的 Buffer。

    const buf = new Buffer([0x74, 0x65, 0x73, 0x74])// // 对应 ASCII 码,这几个16进制数分别对应 t e s t// 将 Buffer 实例转为字符串得到如下结果buf.toString() // 'test'

    new Buffer(buffer)

    拷贝 buffer 的数据到新建的 Buffer 实例。

    const buf1 = new Buffer('test')const buf2 = new Buffer(buf1)

    new Buffer(string[, encoding])

    创建内容为 string 的 Buffer,指定编码方式为 encoding。

    const buf = new Buffer('test')// // 可以看到结果与 new Buffer([0x74, 0x65, 0x73, 0x74]) 一致buf.toString() // 'test'

    更安全的 Buffer

    由于 Buffer 实例因第一个参数类型而执行不同的结果,如果开发者不对参数进行校验,很容易导致一些安全问题。例如,我要创建一个内容为字符串 "20" 的 Buffer,而错误的传入了数字 20,结果创建了一个长度为 20 的Buffer 实例。

    e3d1dfc9ef4c3ae28e0a974d6a0f6dec.png

    可以看到上图,Node.js 8 之前,为了高性能的考虑,Buffer 开辟的内存空间并未释放之前已存在的数据,直接将这个 Buffer 返回可能导致敏感信息的泄露。因此,Buffer 类在 Node.js 8 前后有一次大调整,不再推荐使用 Buffer 构造函数实例 Buffer,而是改用Buffer.from()、Buffer.alloc() 与 Buffer.allocUnsafe() 来替代 new Buffer()。

    Buffer.from()

    该方法用于替代 new Buffer(string)、new Buffer(array)、new Buffer(buffer)。

    Buffer.alloc(size[, fill[, encoding]])

    该方法用于替代 new Buffer(size),其创建的 Buffer 实例默认会使用 0 填充内存,也就是会将内存之前的数据全部覆盖掉,比之前的 new Buffer(size) 更加安全,因为要覆盖之前的内存空间,也意味着更低的性能。

    同时,size 参数如果不是一个数字,会抛出 TypeError。

    0f4f616f08eee9206421aafa293e2717.png

    Buffer.allocUnsafe(size)

    该方法与之前的 new Buffer(size) 保持一致,虽然该方法不安全,但是相比起 alloc 具有明显的性能优势。

    43aa486fc3db0dd0a1a69d48faa975ee.png

    Buffer 的编码

    前面介绍过二进制数据与字符对应需要指定编码,同理将字符串转化为 Buffer、Buffer 转化为字符串都是需要指定编码的。

    Node.js 目前支持的编码方式如下:

    • hex:将每个字节编码成两个十六进制的字符。

    • ascii:仅适用于 7 位 ASCII 数据。此编码速度很快,如果设置则会剥离高位。

    • utf8:多字节编码的 Unicode 字符。许多网页和其他文档格式都使用 UTF-8。

    • utf16le:2 或 4 个字节,小端序编码的 Unicode 字符。

    • ucs2:utf16le 的别名。

    • base64:Base64 编码。

    • latin1:一种将 Buffer 编码成单字节编码字符串的方法。

    • binary:latin1 的别名。

    比较常用的就是 UTF-8、UTF-16、ASCII,前面说过 JavaScript 的 charCodeAt 使用的是 UTF-16 编码方式,或者说 JavaScript 中的字符串都是通过 UTF-16 存储的,不过 Buffer 默认的编码是 UTF-8。

    49376e2abc04a74ef0cfe62a39629677.png

    可以看到一个汉字在 UTF-8 下需要占用 3 个字节,而 UTF-16 只需要 2 个字节。主要原因是 UTF-8 是一种可变长的字符编码,大部分字符使用 1 个字节表示更加节省空间,而某些超出一个字节的字符,则需要用到 2 个或 3 个字节表示,大部分汉字在 UTF-8 中都需要用到 3 个字节来表示。UTF-16 则全部使用 2 个字节来表示,对于一下超出了 2 字节的字符,需要用到 4 个字节表示。2 个字节表示的 UTF-16 编码与 Unicode 完全一致,通过汉字Unicode编码表可以找到大部分中文所对应的 Unicode 编码。前面提到的 『汉』,通过 Unicode 表示为 6C49。

    1d9d868f3a7c7b50cf4ab7cd5653efdf.png

    这里提到的 Unicode 编码又被称为统一码、万国码、单一码,它为每种语言都设定了统一且唯一的二进制编码,而上面说的 UTF-8、UTF-16 都是他的一种实现方式。更多关于编码的细节不再赘述,也不是本文的重点,如果想了解更多可自行搜索。

    乱码的原因

    我们经常会出现一些乱码的情况,就是因为在字符串与 Buffer 的转化过程中,使用了不同编码导致的。

    我们先新建一个文本文件,然后通过 utf16 编码保存,然后通过 Node.js 读取改文件。

    003113c07339d5b3d81af324be074276.png

    const fs = require('fs')const buffer = fs.readFileSync('./1.txt')console.log(buffer.toString())

    0e7483400b2c6ae15030423ec7134134.png

    由于 Buffer 在调用 toString 方法时,默认使用的是 utf8 编码,所以输出了乱码,这里我们将 toString 的编码方式改成 utf16 就可以正常输出了。

    const fs = require('fs')const buffer = fs.readFileSync('./1.txt')console.log(buffer.toString('utf16le'))

    4395c20989ef5e00ca8ddf86debcb1e6.png

    3 认识 Stream

    前面我们说过,在 Node.js 中可以利用 Buffer 来存放一段二进制数据,但是如果这个数据量非常的大使用 Buffer 就会消耗相当大的内存,这个时候就需要用到 Node.js 中的 Stream(流)。要理解流,就必须知道管道的概念。

    在类Unix操作系统(以及一些其他借用了这个设计的操作系统,如Windows)中,管道是一系列将标准输入输出链接起来的进程,其中每一个进程的输出被直接作为下一个进程的输入。这个概念是由道格拉斯·麦克罗伊为Unix 命令行发明的,因与物理上的管道相似而得名。

    -- 摘自维基百科

    我们经常在 Linux 命令行使用管道,将一个命令的结果传输给另一个命令,例如,用来搜索文件。

    ls | grep code

    这里使用 ls 列出当前目录的文件,然后交由 grep 查找包含 code 关键词的文件。

    在前端的构建工具 gulp 中也用到了管道的概念,因为使用了管道的方式来进行构建,大大简化了工作流,用户量一下子就超越了 grunt。

    // 使用 gulp 编译 scssconst gulp = require('gulp')const sass = require('gulp-sass')const csso = require('gulp-csso')gulp.task('sass', function () {  return gulp.src('./**/*.scss')    .pipe(sass()) // scss 转 css    .pipe(csso()) // 压缩 css    .pipe(gulp.dest('./css'))})

    前面说了这么多管道,那管道和流直接应该怎么联系呢。流可以理解为水流,水要流向哪里,就是由管道来决定的,如果没有管道,水也就不能形成水流了,所以流必须要依附管道。在 Node.js 中所有的 IO 操作都可以通过流来完成,因为 IO 操作的本质就是从一个地方流向另一个地方。例如,一次网络请求,就是将服务端的数据流向客户端。

    const fs = require('fs')const http = require('http')const server = http.createServer((request, response) => {    // 创建数据流    const stream = fs.createReadStream('./data.json')    // 将数据流通过管道传输给响应流    stream.pipe(response)})server.listen(8100)// data.json{ "name": "data" }

    d02d186fc74f0ab5e741ab5c7611bd82.png

    使用 Stream 会一边读取 data.json 一边将数据写入响应流,而不是像 Buffer 一样,先将整个 data.json 读取到内存,然后一次性输出到响应中,所以使用 Stream 的时候会更加节约内存。

    其实 Stream 在内部依然是运作在 Buffer 上。如果我们把一段二进制数据比做一桶水,那么通过 Buffer 进行文件传输就是直接将一桶水倒入到另一个桶里面,而使用 Stream,就是将桶里面的水通过管道一点点的抽取过去。

    Stream 与 Buffer 内存消耗对比

    这里如果只是口头说说可能感知不明显,现在分别通过 Stream 和 Buffer 来复制一个 2G 大小的文件,看看 node 进程的内存消耗。

    Stream 复制文件

    // Stream 复制文件const fs = require('fs');const file = './file.mp4';fs.createReadStream(file)  .pipe(fs.createWriteStream('./file.copy.mp4'))  .on('finish', () => {      console.log('file successfully copy');  })

    dc24f5b2b52bd1619e6f0735bae466bd.png

    Buffer 复制文件

    // Buffer 复制文件const fs = require('fs');const file = './file.mp4';// fs.readFile 直接输出的是文件 Bufferfs.readFile(file, (err, buffer) => {    fs.writeFile('./file.copy.mp4', buffer, (err) => {        console.log('file successfully copy');    });});

    ed3a37136d68605dd98fb206f40798bc.png

    通过上图的结果可以看出,通过 Stream 拷贝时,只占用了我电脑 0.6% 的内存,而使用 Buffer 时,占用了 15.3% 的内存。

    API 简介

    在 Node.js 中,Steam 一共被分为五种类型。

    可读流(Readable),可读取数据的流;

    可写流(Writable),可写入数据的流;

    双工流(Duplex),可读又可写的流;

    转化流(Transform),在读写过程中可任意修改和转换数据的流(也是可读写的流);

    所有的流都可以通过 .pipe 也就是管道(类似于 linux 中的 |)来进行数据的消费。另外,也可以通过事件来监听数据的流动。不管是文件的读写,还是 http 的请求、响应都会在内部自动创建 Stream,读取文件时,会创建一个可读流,输出文件时,会创建可写流。

    可读流(Readable)

    虽然叫做可读流,但是可读流也是可写的,只是这个写操作一般是在内部进行的,外部只需要读取就行了。

    可读流一般分为两种模式:

    流动模式:表示正在读取数据,一般通过事件监听来获取流中的数据。

    暂停模式:此时流中的数据不会被消耗,如果在暂停模式需要读取可读流的数据,需要显式调用stram.read()。

    可读流在创建时,默认为暂停模式,一旦调用了 .pipe,或者监听了 data 事件,就会自动切换到流动模式。

    const { Readable } = require('stream')// 创建可读流const readable = new Readable()// 绑定 data 事件,将模式变为流动模式readable.on('data', chunk => {  console.log('chunk:', chunk.toString()) // 输出 chunk})// 写入 5 个字母for (let i = 97; i < 102; i++) {  const str = String.fromCharCode(i);  readable.push(str)}// 推入 `null` 表示流已经结束readable.push(null)

    3e510387857e218e538829ea4c7daf2c.png

    const { Readable } = require('stream')// 创建可读流const readable = new Readable()// 写入 5 个字母for (let i = 97; i < 102; i++) {  const str = String.fromCharCode(i);  readable.push(str)}// 推入 `null` 表示流已经结束readable.push('\n')readable.push(null)// 通过管道将流的数据输出到控制台readable.pipe(process.stdout)

    56b0d66b33463986804f9be09f8fa6b0.png

    上面的代码都是手动创建可读流,然后通过 push 方法往流里面写数据的。前面说过,Node.js 中数据的写入都是内部实现的,下面通过读取文件的 fs 创建的可读流来举例:

    const fs = require('fs')// 创建 data.json 文件的可读流const read = fs.createReadStream('./data.json')// 监听 data 事件,此时变成流动模式read.on('data', json => {  console.log('json:', json.toString())})

    01b1f1d159bcd48087cc4960ae9ce03f.png

    可写流(Writable)

    可写流对比起可读流,它是真的只能写,属于只进不出的类型,类似于貔貅。

    创建可写流的时候,必须手动实现一个 _write() 方法,因为前面有下划线前缀表明这是内部方法,一般不由用户直接实现,所以该方法都是在 Node.js 内部定义,例如,文件可写流会在该方法中将传入的 Buffer 写入到指定文本中。

    写入如果结束,一般需要调用可写流的 .end() 方法,表示结束本次写入,此时还会调用 finish 事件。

    const { Writable } = require('stream')// 创建可写流const writable = new Writable()// 绑定 _write 方法,在控制台输出写入的数据writable._write = function (chunk) {  console.log(chunk.toString())}// 写入数据writable.write('abc')// 结束写入writable.end()_write 方法也可以在实例可写流的时候,通过传入对象的 write 属性来实现。const { Writable } = require('stream')// 创建可写流const writable = new Writable({  // 同,绑定 _write 方法    write(chunk) {    console.log(chunk.toString())  }})// 写入数据writable.write('abc')// 结束写入writable.end()

    69fe3b3398c63bfcca094c5193840e17.png

    下面看看 Node.js 中内部通过 fs 创建的可写流。

    const fs = require('fs')// 创建可写流const writable = fs.createWriteStream('./data.json')// 写入数据,与自己手动创建的可写流一致writable.write(`{  "name": "data"}`)// 结束写入writable.end()

    看到这里就能理解,Node.js 在 http 响应时,需要调用 .end() 方法来结束响应,其实内部就是一个可写流。现在再回看前面通过 Stream 来复制文件的代码就更加容易理解了。

    const fs = require('fs');const file = './file.mp4';fs.createReadStream(file)  .pipe(fs.createWriteStream('./file.copy.mp4'))  .on('finish', () => {      console.log('file successfully copy');  })

    双工流(Duplex)

    双工流同时实现了 Readable 和 Writable,具体用法可以参照可读流和可写流,这里就不占用文章篇幅了。

    管道串联

    前面介绍了通过管道(.pipe())可以将一个桶里的数据转移到另一个桶里,但是有多个桶的时候,我们就需要多次调用 .pipe()。例如,我们有一个文件,需要经过 gzip 压缩后重新输出。

    const fs = require('fs')const zlib = require('zlib')const gzip = zlib.createGzip() // gzip 为一个双工流,可读可写const input = fs.createReadStream('./data.json')const output = fs.createWriteStream('./data.json.gz')input.pipe(gzip) // 文件压缩gzip.pipe(output) // 压缩后输出

    面对这种情况,Node.js 提供了 pipeline() api,可以一次性完成多个管道操作,而且还支持错误处理。

    const { pipeline } = require('stream')const fs = require('fs')const zlib = require('zlib')const gzip = zlib.createGzip()const input = fs.createReadStream('./data.json')const output = fs.createWriteStream('./data.json.gz')pipeline(  input,   // 输入  gzip,    // 压缩  output,  // 输出  // 最后一个参数为回调函数,用于错误捕获  (err) => {    if (err) {      console.error('压缩失败', err)    } else {      console.log('压缩成功')    }  })

    4 参考

    字符编码笔记

    Buffer | Node.js API

    stream | Node.js API

    stream-handbook

    43ad47aced688f3ddfd3149efd8b736b.png

    关注我们

    85566ce64ba7c190cbf17a14334ccfca.png 4f372fb3e069a12b2ccb4dc12b97c67a.png

    公众号ID:前端Sharing

    冰淇淋里有夏天的味道

    展开全文
  • 二进制数的运算规则

    万次阅读 2018-08-24 10:14:32
     (3) 乘法运算规则 例如:二进制数之间可以执行算术运算和逻辑运算,其规则简单,容易实现。  (1) 加法运算规则  0 + 0 = 0 例如: 1 1 0 1  0 + 1 = 1 +) 1 0 0 1  1 + 0 = 1  1 + 1 = 0 (产生进位) ...

     

     


      (3) 乘法运算规则    例如:二进制数之间可以执行算术运算和逻辑运算,其规则简单,容易实现。

      (1) 加法运算规则
       0 + 0 = 0         例如: 1 1 0 1
       0 + 1 = 1          +) 1 0 0 1
       1 + 0 = 1          二进制数的运算规则 
       1 + 1 = 0 (产生进位)    1 0 1 1 0


      (2) 减法运算规则
       0 - 0 = 0         例如:
       0 - 1 = 1 (产生借位)     1 1 0 1
       1 - 0 = 1          -)0 1 1 1
       1 - 1 = 0          二进制数的运算规则
                       0 1 1 0

       0 × 0 = 0           1 1 0 1
       0 × 1 = 0          × 1 0 0 1
       1 × 0 = 0         二进制数的运算规则
       1 × 1 = 1           1 1 0 1
                      0 0 0 0         
                     0 0 0 0
                    1 1 0 1
                     二进制数的运算规则
                    1 1 1 0 1 0 1

      (4) 除法运算规则
      二进制数除法的计算方法,与十进制数除法类似,也由减法、上商等操作分步完成。
      例如:
      二进制数的运算规则
      逻辑运算是在对应的两个二进制位之间进行的,与相邻的高低位的值均无关,即不存在进位、借位等问题。

      (5) 逻辑或运算规则(运算符为V)
       0ν0=0       例如:
       0ν1=1          1100
       1ν0=1          ν1010
       1ν1=1       二进制数的运算规则
                   1110

      (6) 逻辑与运算规则(运算符为Λ)
       0Λ0=0       例如:
       0Λ1=0          1100
       1Λ0=0          Λ1010
       1Λ1=1       二进制数的运算规则
                    1000

      (7) 逻辑非运算规则(运算符为)
    二进制数的运算规则 
      逻辑非实现对单个逻辑值的处理,而不是对两个逻辑值的运算,逻辑非又被称为逻辑取反操作。对逻辑数1011逐位进行取反,其结果为0100。

      (8) 逻辑异或运算规则(运算符为?)
    二进制数的运算规则

      与、或、非操作是三种最基本的逻辑操作,用它们可以组合出任何逻辑运算功能。某些情况下,还要用到逻辑异或操作。逻辑异或实现的是按位加功能, 只有参与异或操作的两个逻辑值不同时(一个为0,另一个为1),结果才为1,和或操作结果的差异表现在:或操作中1或1 =1,而异或操作则是 1 异或 1 = 0。

    转载:http://blog.sina.com.cn/s/blog_6e51df7f0100tmw4.html

    展开全文
  • 二进制在线转换是用0和1两个数码来表示的数。 它的基数为2, 进位规则是“逢二进一”, 借位规则是“借一当二”.    相关阅读 同类推荐:站长常用软件
  • 二进制运算符

    千次阅读 2020-06-23 10:28:52
    它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则...
  • 针对补码这个常见的概念,引申到小数的补码,并且用实例说明其运算规则
  • 二进制在线转换 v1.0

    2019-10-23 17:22:15
    二进制是用0和1两个数码来表示的数。它的基数为2, 进位规则是“逢二进一”, 借位规则是“借一当二”.
  • 理解二进制的原码、反码、补码

    千次阅读 2019-10-03 13:21:54
    一、什么是二进制 二、什么是原码 三、什么是反码 四、什么是补码
  • 二进制数的算术运算

    千次阅读 2019-10-27 11:24:54
    加法进位规则:逢二进一。 加法运算法则: 0+0=0 0+1=1+0=1 1+1=10(向高位进位) 例:(1101)2+(1011)2=?,解算如下: 从执行加法的过程可知,两个二进制数相加时,每一位是3个数参加运算,除被加数位加上加数位外,还要...
  • 它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的.二进制数的运算包括...
  • 二进制加法计算

    万次阅读 2018-07-21 15:24:58
    读计算机原理这本书的的时候涉及到二进制数的加法,个人做个直观的纪律,防止遗忘。 计算时,先把两个二进制数对齐(如果十进制一样) 1+1为10,此时向上一位进1,0写在本位(如同十进制) 不全为1的两个数,直接...
  • 二进制加减法计算法则

    万次阅读 2020-02-12 14:24:09
    一、二进制加法(逢2进1) 举例:100111+11010=100001 1 0 0 1 1 1 1 1 0 1 0 —————— 1 0 0 0 0 1 十进制加法是逢十进一,二进制加法是逢二进一。 最低位:1加0得1。 倒数第2位:1加1得2,同时进1。 倒数第3位...
  • 二进制和十六进制

    千次阅读 2018-08-16 08:40:17
    不管用什么高级语言编写的程序最后都要转换为二进制语言,才能在计算机上执行,因此掌握二进制知识对学习编程语言是非常有帮助的。本篇和同学们探讨二进制计数原理以及与十进制、十六进制的转换。通过本篇的学习,你...
  • C语言中关于二进制的换算

    千次阅读 2019-08-30 09:17:17
    十进制是逢十进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。 十进制 二进制 数码: 0、1、2、3、4、5、6、7、8、9 数码: 0、1 基数: 10 基数: 2 运算规律: 逢十进一,借一当十 运算...
  • Tape也叫“带” 在状态转换的时候需要遵照一定的规则 ...如何使用图灵机实现二进制非负整数加一 图灵机实现如下 第一行 认为图灵机是向左的状态 若为1则翻转为0 第二行 向左运动的时候碰到的第一个0 这个0置1 然后
  • 计算机二进制编码

    2020-10-17 17:00:56
    二进制编码知识。
  • 它的基数为2,进位规则是“逢进一”,借位规则是“借一当”。 八进制:在八进制数中,每一位用0—7八个数码表示,所以它的计数基数为8。低位数和高一位数之间的关系是逢八进一。 十六进制:十六进制数的基数是...
  • 二进制运算

    2018-10-31 17:48:47
    1、二进制加法运算  &lt;1&gt;1110+0111=10101 解析: 先将两个二进制上下对齐如下   0 + 1 = 1,1 + 1 = 10 则右边第一位0+1得1; 右边第二位1+1得10,即得0进1; 右边第三位1+1得10(即得0进1)...
  • 进位制/位置计数法是一种记数方式,故亦称进位记数法/位值计数法,可以用有限的数字...十进制转二进制:十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,
  • Hellow二进制

    2021-01-17 17:10:17
    Hellow 二进制 在web和二进制中我一眼就看准了二进制,为什么会这样说的呢,可能是跟数字有缘,哈哈哈哈哈哈。确实,跟数字挺有缘的,毕竟小编的数学还是很不错的高考军考都是三位数呢,嘻嘻嘻,该低调还是要低调的...
  • 一.本文所涉及的内容... 二进制 → 十进制 八进制 → 十进制 十六进制 → 十进制 (十进制) → (二、八、十六进制) 十进制 → 二进制 十进制 → 八进制 十进制 → 十六进制 (...
  • 众所周知,计算机中使用的是二进制运算规则,能够读懂二进制语言,但究竟什么是进制?进制之间是如何相互转化的?今天我们就来详细了解下。
  • 二进制的加减法_二进制加减法

    万次阅读 2020-07-25 16:25:50
    二进制的加减法 1)二进制加法 (1) Binary Addition) Since binary numbers consist of only two digits 0 and 1, so their addition is different from decimal addition. Addition of binary numbers can be done ...
  • 二进制数的运算方法

    万次阅读 多人点赞 2017-08-29 14:12:13
    (1)二进制数的加法 根据“逢二进一”规则二进制数加法的法则为: 0+0=0 0+1=1+0=1 1+1=0 (进位为1) 1+1+1=1 (进位为1) 例如:1110和1011相加过程如下: (2)二进制数的减法 根据“借一有...
  • JAVA二进制详解

    千次阅读 2017-07-18 20:00:01
    1、什么是二进制? 计算机内存中只有二进制,任何数据都需要转换为2进制才能计算处理2、十进制 逢十进一,99进位连续进两位,以此类推 数字: 0 1 2 3 4 5 6 7 8 9 权:10000 1000 100 10 1 基数:10 权...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,652
精华内容 5,060
热门标签
关键字:

二进制进位规则