精华内容
下载资源
问答
  • 二进制中小除大
    千次阅读
    2021-07-21 05:31:49

    虽然很早就接触了二进制,却一直没有正视这个问题,阅读《计算机科学导论》的时候,基本上是跳过了这一部分,总是以“这么基础的东西,反正工作中基本用不上”的理由给搪塞过去。最近正在阅读《编码》和《程序员的数学思维修炼》,心想终究还是得面对的,于是记录了一点笔记,希望不再回避letcode上关于二进制计算的题目。

    10对于我们来讲是一个很平常但又十分神奇的数字。根据《编码》上面的解释,人类的双手非常适合数数,因而我们早已经适应了以10为基础的数字系统。也正是这个习惯,让我在刚接触二进制的时候,感到无比困惑,明明十分简单的概念,却始终不得要领。

    十进制中以0-9这十个数码进行组合来表示数字,且赋予10的整数次幂重大的意义:十,百,千,万,亿...

    那么,什么是二进制呢?

    1. 概念

    二进制就是使用0和1这两个数码进行组合来表示数字的一种计数方法。

    计算机使用二进制的主要优点有:

    技术实现简单,计算机的逻辑电路只需要表示两个状态(电路的断开与连接),使用1和0表示就够了;如果使用十进制,则只能依靠电压的高低进行区分,这无疑会大大增加技术实现的难度

    运算规则简单,二进制的运算规则比十进制少了很多(不需要在文具盒上背诵加法表乘法表了),规则少意味着能够简化计算机的内容结构

    适合逻辑运算,计算机不仅需要进行算术运算,还需要进行逻辑元素,二进制只有两个数码,恰好与逻辑代数中的真和假完全吻合!

    2. 算术运算

    2.1. 四则预算

    2.1.1. 加

    逢二进一

    跟十进制的加法一样,只是进位从10变成了2,这是第一个需要认清的问题

    // 加法表

    0 + 0 = 0;

    1 + 0 = 0;

    0 + 1 = 1;

    1 + 1 = 1; // 进位1

    比如计算111 + 101,从右往左利用基本规则进行计算

    第一位(从右往左的顺序)1 + 1 = 0;,进位1,

    第二位原本是1 + 0,由于进位变成了1 + 1 = 0,继续进位1,

    第三位原本是1 + 1 = 0并进位1,由于进位继续计算0 + 1 = 1,未再次进位

    最后结果1100

    好吧,我放弃用语言描述这个过程了,老老实实拿笔在纸上算两次就好了,实际上跟十进制没有任何区别,只是需要背诵的加法表缩短为仅仅四条了(考虑到加法交换率,实际上只有3条)!

    2.1.2. 减

    借一当二

    // 减法表

    0 - 0 = 0;

    1 - 1 = 0;

    1 - 0 = 1;

    0 - 1 = 1; // 借位为1

    比如计算111 - 101,最后结果10

    2.1.3. 乘

    与十进制相比(九九八十一种),二进制的乘法要简单得多(只有四种),只有1 * 1 = 1,其余全为0

    // 乘法表

    0 * 0 = 0;

    0 * 1 = 0;

    1 * 0 = 0;

    1 * 1 = 1;

    运算过程也与十进制类似,用第二个乘数的每位依次乘以第一个乘数,最后运用加法规则将结果相加,就得到了两个二进制数的乘积,可以理解为:“0乘以任何数都等于0,而1乘以任意数都等于乘数本身”。

    乘法实际上可以看作是加法与移位的操作,如111 * 101可转换为111 + 0000 + 11100 = 100011。

    2.1.4. 除

    // 除法表

    0 / 0 = 0; // 无意义

    1 / 0 = 0; // 无意义

    0 / 1 = 0;

    1 / 1 = 1;

    除法可以使用试商法进行,先从被除数的最高位开始,将被除数(或中间余数)与除数相比较,若被除数(或中间余数)大于除数,则用被除数(或中间余数)减去除数,商为1,并得相减之后的中间余数,否则商为0。再将被除数的下一位移下补充到中间余数的末位,重复以上过程,就可得到所要求的各位商数和最终的余数。

    除法实际上可以看作减法和移位的操作。如:111/101 = 1 余 10。

    2.2. 与十进制的转换

    2.3. 二进制转十进制

    虽然只有0和1两个数码,但是在位置化数字系统中,数码所处的位置不同(位置被称为权),其代表的实际数据大小也不相同。如1101,在二进制中:

    第一个1表示1的个数

    第二个0表示2的个数

    第三个1表示4的个数

    第四个1表示8的个数

    好吧,实际上这儿又被带进坑了。更准确的说法是2的0次幂,2的1次幂,2的2次幂,2的3次幂的个数,只是2的2次幂用十进制表示是4,2的3次方幂用十进制表示是8罢了。

    可见,只需要计算1*1 + 2*0 + 4*1 + 8*1,就可以二进制转换成十进制的数字了,结果显而易见13。其他二进制转十进制同理。

    实际上这种转换方式并不是二进制独有的,其他进制转10进制也可以采用同样的方法,只需要将基数2转换成对应进制的基数就行了。

    2.4. 十进制转二进制

    十进制转二进制看起来要麻烦一点,通常采用“除2取余,逆序排序的方法”。比如将数字23转换为二进制表示的过程可如下表示:

    23/2 = 11...1

    11/2 = 5...1

    5/2 = 2...1

    2/2 = 1...0

    最后结果逆序排序表示为1,0,1,1,1,所以23的二进制表示为10111;

    上述过程用代码展示应该要清晰一些

    function ten2bin(n){

    if (n == 0){

    return 0;

    }

    var res = "";

    while(n){

    res = n%2 + res;

    n = Math.floor(n/2);

    }

    return res;

    }

    3. 逻辑运算

    计算机不仅执行算术运算,也可以执行逻辑运算。在逻辑代数中,只有真和假两种逻辑值,这跟二进制中的仅有的两个数码1和0完全吻合。下面整理了关于逻辑运算的一些东西

    3.1. 基本逻辑运算

    逻辑运算中,"与"、"或"、"非"是三种最基本的运算规则。

    3.1.1. 与

    使用&&表示与运算,参与运算的所有逻辑代数必须全部为真,整个结果才为真。

    在电路中表示就是:所有串联的开关必须全部闭合,灯泡才会通电。

    1&& 1 = 1

    1&& 0 = 0

    0&& 1 = 0

    0&& 0 = 0

    发现没,"与"规则表跟二进制算术运算中的乘法是一模一样的哦!

    3.1.2. 或

    使用||表示或运算,参与运算的所有逻辑代数只要有一个为真,整个结果就为真。

    在电路中表示就是:所有并联的开关只要有一个闭合,灯泡就会通电。

    1|| 0 = 1

    1|| 1 = 1

    0|| 1 = 1

    0|| 0 = 0

    同样地,"或"运算规则表跟二进制算术运算中的加法基本一样(逻辑运算中不存在进位的说法)。

    3.1.3. 非

    使用!表示非运算,整个逻辑表达式的结果与逻辑代数相反

    在电路中表示就是:如果开关闭合,则灯泡被短路;开关断开,灯泡通电

    !1 = 0

    !0 = 1

    3.2. 复杂逻辑运算

    "与"、"或"、"非"是三种最基本的运算规则,其他复杂的逻辑运算都可以用基本运算组合而成。

    与非,运算中所有的逻辑代数都为真,则结果为假,!(a && b && c)

    或非,运算中只要有一个逻辑代数为真,则结果为假,!(a || b || c)

    异或,运算中的两个逻辑代数,有一个为真且另一个为假时,则结果为真,(a&&!b) || (!a && b)

    同或,运算中的两个逻辑代数,都为真或者都为假时,则结果为真,(a && b) || (!a && !b)

    4. 位运算

    大部分高级编程语言都提供了按位操作数字的功能。这一点似乎有些不合理,在日常生活中的计算都是按照某个数字具体代表的值来进行计算的。但是在计算机中,操作数字的某个特定位是很有意义的。下面我们来学习位运算。

    4.1. 位逻辑运算符

    位逻辑运算符与逻辑运算符有很大的区别:

    位逻辑运算符只操作位(位上的数码只可能是0或者1)

    逻辑运算符操作的是真或者假,这是由整个变量的值所决定的

    4.1.1. 位反

    按位取反也叫做二进制反码,使用~表示,指将操作数全部位中的1变成0,将每个0变成1

    ~1011)

    =0100

    按位取反有个小技巧:a取反加一,再取反加一,还等于a 。更通俗一点将,如果操作数为-1,则按位取反结果为0。

    这一点很有用处,很多接口都使用-1来表示程序未返回预期结果,比如JavaScript中的indexOf(),此时可以使用~idx来判断,比起idx === -1要好不少(看起来)。

    4.1.2. 位与

    二进制运算符与&通过对两个操作数逐位进行比较,对于每个位置,只有对应的位都为1时,结果对应位置的值才为1,否则为0

    1010

    & 1100

    = 1000

    位于通常用来实现掩码。

    4.1.3. 位或

    二进制运算符或|通过对两个操作数逐位进行比较,对于每个位置,只要任意一个操作数对应位为1时,结果对应位置的值就为1,否则为0

    1010

    & 1100

    = 1110

    4.1.4. 位异或

    二进制运算符异或^通过对两个操作数逐位进行比较,对于每个位置,只要任意一个操作数对应位为1时,另一个位置为0,结果对应位置的值就为1。

    1010

    ^ 1100

    = 0110

    4.2. 移位运算符

    移位运算符将位向左或向右移动。了解移位运算应当首先了解整数的存储形式,在C语言中,一个int类型的整数占4个字节,而通常一个字节包括8个位,即一个整数包含32位。移位运算就是移动整个操作数在32个位中的位置。

    二进制中的移位运算类似于十进制中的移动小数点的操作,从而快速进行乘除法。

    4.2.1. 左移运算符

    左移运算符<

    1010 << 2

    = 101000

    在不溢出的情况下,左移n位会将操作数扩大2^n倍。

    4.2.2. 右移运算符

    右移运算符将其左侧操作数的值的每位向右移动,并丢弃移出左侧操作数右端的数(肯定会移出的)

    1010 >> 1

    = 101

    5. 八进制与十六进制

    使用二进制存储数据带来的问题是:二进制数字的位数增长十分迅速,保存一个不是很大的数字就需要很长的位数。可见二进制并不适合在计算机外部保存数字,因此产生了八进制和十六进制

    5.1. 八进制

    八进制使用0~7这八个数码来表示数字,由于2^3 = 8,因此二进制和八进制的转换十分方便。

    从二进制转八进制,只需要从右往将三个二进制分为一组(最左不足可用0填充),然后计算为对应的八进制数码,最后将结果拼接在一起就可以了。比如101110:

    将整个数字分为101和110

    101计算结果为2^2 + 1 = 5,110计算结果为2^2 + 2^1 = 6

    所以101110用八进制表示为56

    同理,从八进制转二进制也十分简单,将八进制数字每位拆分成一个三个为二进制数(不足用0填充),然后将结果拼接在一起,比如76用二进制表示为111110,过程这里就不详细写了。

    5.2. 十六进制

    十六进制使用0~9加A~F这十六个数码来表示数字。由于2^4 = 16,加之有了八进制与二进制的相互转换规律,十六进制与二进制的相互转换就轻而易举了,无非是将二进制数按4个一组进行划分,或者将一个十六进制数码转换成4位二进制数

    F2二进制表示为11110010

    101101十六进制表示为2D

    6. 小结

    关于二进制的运算先到这里了,另外还有浮点数等知识,先留个坑了。

    更多相关内容
  • 二进制文件大小端转换工具,单独工具;二进制文件大小端转换工具,单独工具;二进制文件大小端转换工具,单独工具
  • 需要电脑配置有Qt环境变量:(使用windeployqt + formatTest.exe进行打包后可不依赖环境)。 源码地址:https://blog.csdn.net/weixin_41493717/article/details/81380827#comments_17790746
  • 将任意指定的文件,以二进制的方式,指定区间进行切割。 可以将HTTP的请求图片、视频导出 可以去除文本文件BOM头 可以提取文件中间的乱码字节
  • 浮点数转二进制,二进制转浮点数,E,PI转二进制小工具
  • 指定文本、或二进制文件、指定发送目标端口和目标IP、将文件内容以UDP数据包的形式发送出。 开发测试推送二进制报文非常简单
  • 好用的浮点数与二进制转换工具,通讯开发必备实用工具,4字节浮点数转换,支持正序倒序转换。浮点数转二进制二进制转浮点数,转换准确。
  • 二进制乘法、法的计算过程解读

    千次阅读 多人点赞 2021-01-18 20:55:11
    本文包括4位二进制乘法(4位乘4位)和8位二进制除法(8位4位)的详细计算过程。 1.创作原因 计组实验的涉及到此问题,当时上网查阅了许多博客和资料都没能理解这两者的计算过程,因此想写一篇博客为后来者提供...

    0. 问题描述

    本文包括4位二进制乘法(4位乘4位)和8位二进制除法(8位除4位)的详细计算过程。

    1.创作原因

    计组实验中的涉及到此问题,当时上网查阅了许多博客和资料都没能理解这两者的计算过程,并且我发现许多资料上的计算过程显得非常繁琐、晦涩,明明两三句话就可以讲明白的东西偏要说的不明不白,细节的地方忽略,计算过程示例也很少且不清楚,导致我遇到了很大困难。后来历经磨难终于理解了这两个计算过程,当时就决心要写一篇博客把这个用最简单但却最详细的话讲清楚,为后来者提供便利,少走一些弯路,多节约一些时间。
    下面我们直接开始吧~

    2.二进制乘法

    被乘数设为5:101B
    乘数设为7:111B

    开始计算之前设置一个变量N保存乘法的最终结果,初始化为0。
    则有详细的计算过程如下:

    1. 判断乘数111B的最后一位为1,则N加上被乘数,N更新为0+5=5
    2. 乘数右移一位更新为11B,被乘数左移一位更新为10
    3. 判断乘数11B最低位为1,则N加上被乘数,N更新为10+5=15
    4. 乘数右移一位更新为1B,被乘数左移一位更新为20
    5. 此时乘数1B最低位为1,则N加上被乘数,N更新为20+15=35
    6. 乘数右移一位更新为0,被乘数左移一位更新为40
    7. 此时检测乘数为0,循环结束,N的最终结果为35,即为乘法的结果

    下面来总结一下整个计算过程的要点:

    • 继续循环还是结束循环取决于什么时候乘数变为0
    • 每一次循环中如果乘数最后一位为1则N加上被乘数;为0则不加上被乘数

    下面再来看一下它的思想是什么:
    我们知道 8 ∗ 8 = 16 ∗ 4 = 32 ∗ 2 = 64 ∗ 1 = 64 8*8=16*4=32*2=64*1=64 88=164=322=641=64, 这个乘法的特点就给了我们计算二进制乘法的思路,二进制中左移是乘2,右移是除2,如果被乘数左移乘数右移那么他们的乘积是不变的,即: 100 B ∗ 10 B = 1000 B ∗ 1 B = 1000 B = 8 100B*10B=1000B*1B=1000B=8 100B10B=1000B1B=1000B=8。但是如果乘数的末位为1的话不能简单地进行左移右移,设想如果不加处理乘数直接右移那么结果就会丢失掉一个被乘数的大小,这也就是为什么如果判断末位为1结果就要加上一个被乘数的原因。

    8位乘8位的结果需要16位保存,其计算过程也与上方相同,只是需要涉及的寄存器更多,更加复杂一些。

    3.二进制除法

    被除数24:11000B
    除数5:101B

    开始计算前我们设置一个N表示商,其值初始化位0。
    则有详细的计算过程如下:

    1. 将除数的最高有效位左移至与被除数的最高有效位对齐,这里将除数101B左移两位即可,除数更新为10100B
    2. 用被除数11000B减除数10100B,发现减得过来,因为减得过来,所以商+1,商更新为N=1。减法的结果为100B,所以被除数更新为100B
    3. 用被除数100B减除数10100B,发现减不过来,因为减不过来,所以除数右移一位,更新为1010B;因为除数右移一位,所以商左移一位更新为N=1*2=2 (注:左移就是与2做乘法)
    4. 用被除数100B减除数1010B,发现减不过来,所以除数右移一位,更新为101B;因为除数右移一位,所以商左移一位更新为N=2*2=4
    5. 发现现在除数的大小又变回了最开始的大小101B,则循环结束。所以现在的N=4就是除法结果,现在的被除数100B就是除法的余数
    6. 结束,结果正确

    下面来总结一下整个计算过程的要点:

    • 有许多资料可能会设置一个计数器,但我采用的的是另外的方法,和计数器其实是差不多的。除法进行到最终,除数一定要与最开始的除数相等,如果不相等则需要除数一直右移直至相等为止,相应的商也要左移同样的位数(这其实就是整除的情况)
    • 循环继续还是停止取决于除数是否与最开始的除数相等
    • 循环中,用被除数减除数,如果减得过来就用减法结果更新被除数并商+1;如果减不过来除数就右移一位,商左移一位
    • 减不减得过来其实就看在做减法的过程中是否产生借位就可以了,在汇编语言中可以体现为标志位CF是否为1

    下面我再举一个整除的例子:
    被除数8:1000B
    除数2:10B

    计算开始:

    1. 除数10B左移两位,更新为1000B
    2. 被除数1000B减除数1000B,减得过来所以商+1,商更新为N=1;减法的结果为0所以被除数更新为0
    3. 被除数0减除数1000B,减不过来所以除数右移一位更新为100B,因此商左移一位更新为N=1*2=2
    4. 被除数0减除数100B,减不过来所以除数右移一位更新为10B,因此商左移一位更新为N=2*2=4
    5. 此时除数已经等于原来的除数所以循环结束,除法的商为4,余数等于此刻的被除数0
    6. 除法结束,结果正确

    你是否对上面有一点说法有所疑惑?我在上面说到了如果什么时候除数与最开始的除数相等则结束循环,那么肯定有人会想,如果刚开始除数就不需要左移(这个时候被除数与除数位数相同),这时候是不是只进行一次循环就停止呢?

    举一个除数不需要左移的例子:
    被除数14:1110B
    除数9:1001B

    还是设除法的商为N,初始化为0。
    则有详细的计算过程如下:

    1. 除数1001B与被除数1110B最高有效位对齐,所以无需左移
    2. 被除数1110B减1001B,发现减得过来,则商+1,N更新为N=0+1=1;减法结果为101B,则被除数更新为101B
    3. 被除数101B减除数1001B,发现减不过来,再发现此时除数与最开始的除数相等,所以除数无需右移,计算直接结束
    4. N=1为最终的商,被除数为101B则为除法的余数

    那么上面的计算过程需要注意这些地方:

    • 注意你需要在计算的什么地方判断除数是否等于最开始的除数,也就是说你需要明白你应该把判断除数这一过程放在步骤的哪一步才能让计算正确的结束,这需要思考
    • 这个计算过程能够正确计算被除数小于除数的情况

    它的计算思想就不细说了,在上述计算过程中都有所体现。
    我用汇编语言分别实现了这两个计算过程,如下:

    4.汇编实现

    4.1 4乘4乘法

        mov R0, #9
        mov R1, #7
        mov R2, #0
    
        mov A, R0
        and A, R0
        jz OVER;check zero
    LOOP:
        mov A, R1
        and A, R1
        jz OVER;check zero
        and A, #1
        jz TAG2
        mov A, R2
        add A, R0
        mov R2, A
    TAG2:
        mov A, R1
        shr R1
        mov A, R0
        shl R0
        jmp LOOP
    OVER:
        halt 
    

    4.1 8除4除法

            mov R1, #3;除数
            mov R2, #0;商
            mov A, R1
            mov 90, A;把除数存储起来
            
            ;计算计数器的值
    JUDGE_CNT:
            mov A, R1
            and A, #80h
            jz RM;如果是0就左移
            jmp JUDGE_CNT_END
    RM:
            shl R1
            jmp JUDGE_CNT
    JUDGE_CNT_END:
            mov A, R0
            sub A, R1
            jc ADD_BACK_MOVE;不够减加回去,除数右移
            ;够减商加一,被除数更新
            mov R0, A
            add R2, #1       
            
    ADD_BACK_MOVE:;不够减的情况
            ;除数右移一位
            mov A, R1
            sub A, 90
            jz OVER;减到原除数大小结束
            shr R1
            shl R2
            jmp JUDGE_CNT_END
    OVER:
            jmp OVER
    

    4.3 说明

    这两个汇编程序不是8086那套东西所以可能有不一样的地方,不用在意,大家只需要关注其中的计算过程即可。

    5.ending

    若有疑问可以在评论区提出一起来探讨,对你有帮助的话别忘了点赞喔~

    展开全文
  • 程序生成二维码并且把二进制流转换图片
  • 今天编就为大家分享一篇Python+OpenCV实现将图像转换为二进制格式,具有很好的参考价值,希望对大家有所帮助。一起跟随编过来看看吧
  • 个人原创软件,MFC界面,可以任意转换64bit数据到2进制、10进制、16进制,支持取位、移位、大小端转换、加、减、乘、、取余、与、或、非计算,支持Unicode、ANSI、UTF-8编码相互...此版本支持二进制文本解析和复制
  • 二进制补码乘法法 1)二进制乘法 (1) Binary Multiplication) Binary numbers can be multiplied using two methods, 二进制数可以使用两种方法相乘, Paper method: Paper method is similar to multiplication ...

    二进制补码乘法除法

    1)二进制乘法 (1) Binary Multiplication)

    Binary numbers can be multiplied using two methods,

    二进制数可以使用两种方法相乘,

    1. Paper method: Paper method is similar to multiplication of decimal numbers on paper.

      纸张方法:纸张方法类似于纸张上十进制数字的乘法。

    2. Computer method: Computer method is used by digital machines to multiply the binary numbers.

      计算机方法:数字计算机使用计算机方法乘以二进制数。

    However, both these methods follow the same rule of multiplication which is,

    但是,这两种方法都遵循相同的乘法规则,即

        0 * 0 = 0
        0 * 1 = 0
        1 * 0 = 0
        1 * 1 = 1
    
    

    Note: If two binary numbers are of 'n' bits each in magnitude, then their product can be maximum '2n' bits long in magnitude.

    注意:如果两个二进制数的大小均为'n'位,则它们的乘积最大为'2n'位。

    长手乘法/纸张方法 (Long Hand Multiplication/Paper Method)

    The long Hand Multiplication technique is similar to decimal multiplication that we do on paper.

    长手乘法技术类似于我们在纸上进行的十进制乘法。

    In this technique, we multiply the multiplicand with each bit of multiplier and add the partial products together to obtain the result.

    在这项技术中,我们将被乘数与乘数的每一位相乘,并将部分乘积相加以获得结果。

    We scan the multiplier from the RHS, if the multiplier bit is 1 then we copy the whole multiplicand in the partial product and if the multiplier bit is 0, we replace all the bits of the multiplicand with 0 in the partial product.

    我们从RHS扫描乘数,如果乘数位为1,则复制部分乘积中的整个被乘数,如果乘数位为0,则将乘积中的所有位替换为部分乘积中的0。

    Example 1: Compute (10)2 * (11)2

    示例1:计算(10) 2 *(11) 2

    Solution:

    解:

    binary multiplication 1

    Therefore, the result is (10)2 * (11)2 = (110)2

    因此,结果是(10) 2 *(11) 2 =(110) 2

    Verification:

    验证:

    We can verify our result by converting the binary numbers to respective decimal numbers and multiplying them to get the result.

    我们可以通过将二进制数字转换为相应的十进制数字并乘以它们以获得结果来验证我们的结果。

    Here, (10)2 = (2)10, (11)2 = (3)10 and (110)2 = (6)10. When we will multiply 2 and 3, we will get the product as 6, which we are getting by multiplication of binary numbers. Hence our solution is correct.

    在此, (10) 2 =(2) 10(11) 2 =(3) 10(110) 2 =(6) 10 。 当我们将23相乘时,我们将得到乘积为6 ,这是通过二进制数相乘得到的。 因此,我们的解决方案是正确的。



    Example 2: Compute (111)2 * (101)2

    示例2:计算(111) 2 *(101) 2

    Solution:

    解:

    binary multiplication 2

    Therefore, the result is (111)2 * (101)2 = (100011)2

    因此,结果为(111) 2 *(101) 2 =(100011) 2



    Example 3: Compute (1010.01)2 * (1.01)2

    示例3:计算(1010.01) 2 *(1.01) 2

    Solution:

    解:

    binary multiplication 3

    Therefore, the result is (1010.01)2 * (1.01)2 = (1100.1101)2

    因此,结果为(1010.01) 2 *(1.01) 2 =(1100.1101) 2

    2)二进制除法 (2) Binary Division)

    Like binary multiplication, division of binary numbers can also be done in two ways which are:

    像二进制乘法一样,二进制数的除法也可以通过两种方式完成:

    1. Paper Method: Paper Method division of binary numbers is similar to decimal division.

      纸张方法 :纸张方法对二进制数的除法类似于十进制除法。

    2. Computer Method: Computer Method is used by the digital devices where they make use of 2's complement of a number to subtract the numbers during division.

      计算机方法 :数字设备使用数字方法使用数字的补码来在除法运算中减去数字。

    长手分割法/纸法 (Long Hand Division Method/Paper Method)

    In binary division, there are only two possibilities either 0 or 1. If the divisor goes into the dividend then quotient will be 1 and if the divisor doesn’t then the quotient will be 0. Similar, to decimal division, we will subtract divisor from the dividend and the result will be appended by the next bit in the dividend. This process repeats until all the bits of the dividend are considered.

    二进制除法中 ,只有两种可能性,即0或1。如果除数进入被除数,则商将为1;如果除数没有,则商将为0。类似于十进制除法,我们将减去除数的红利和结果将被添加到红利的下一位。 重复此过程,直到考虑了除数的所有位。

    Example 1: Divide (111101)2 by (100)2

    范例1:将(111101) 2除以(100) 2

    Solution:

    解:

    binary division 1

    Therefore, the result is (111101)2 / (100)2 gives (1111)2 (Quotient) and 1 (Remainder)

    因此,结果为(111101) 2 /(100) 2得出(1111) 2 (商)和1(余数)



    Example 2: Divide (110101.11)2 by (101)2

    范例2:将(110101.11) 2除以(101) 2

    Solution:

    解:

    binary division 2

    Therefore, the result is (110101.11)2 / (101)2 gives (1010.11)2.

    因此,结果为(110101.11) 2 /(101) 2给出(1010.11) 2

    Verification:

    验证:

    We can verify our result by converting the binary numbers to respective decimal numbers and then dividing the dividend by the divisor to get the result.

    我们可以通过将二进制数字转换为相应的十进制数字,然后将除数除以除数来得到结果,从而验证我们的结果。

    Here, (110101.11)2 = (53.75)10, (101)2 = (5)10 and (1010.11)2 = (10.75)10. When we will divide 53.75 by 5, we will get the result as 10.75, which we are getting by doing division of binary numbers. Hence our solution is correct.

    在此, (110101.11) 2 =(53.75) 10(101) 2 =(5) 10(1010.11) 2 =(10.75) 10 。 当我们将53.75除以5时 ,将得到10.75的结果,这是通过对二进制数进行除法得到的。 因此,我们的解决方案是正确的。



    Example 3: Divide (1010.1)2 by (101.01)2

    示例3:将(1010.1) 2除以(101.01) 2

    Solution:

    解:

    binary division 3

    Therefore, the result is (1010.1)2 / (101.01)2 gives (10)2.

    因此,结果是(1010.1)2 /(101.01)2给出了(10)2。

    翻译自: https://www.includehelp.com/basics/binary-multiplication-and-division.aspx

    二进制补码乘法除法

    展开全文
  • 具有三种搜索功能。 - 使用十六进制搜索字节 - 搜索纯文本字符串 - 搜索较二进制文件
  • Bin 二进制Binary,简写为B,在Java的前缀表示为0b Oct 八进制Octal,简写为O,在Java的前缀表示为0 Des 十进制Decimal,简写为D Hex 十六进制Hexadecimal,简写为H,在Java的前缀表示为0x 2. 初识二进制 其实...

    什么是二进制?

    1. 前言

    对于任何一种进制—X进制,就表示每一位置上的数运算时都是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。
    我们常用的有以下几种进制:
    Bin 二进制Binary,简写为B,在Java中的前缀表示为0b
    Oct 八进制Octal,简写为O,在Java中的前缀表示为0
    Des 十进制Decimal,简写为D
    Hex 十六进制Hexadecimal,简写为H,在Java中的前缀表示为0x

    2. 初识二进制

    其实,不同进制的计算方式是相通的:
    我们先列一些常用的10进制与2进制的对应关系,大家先来感受一下:
    在这里插入图片描述
    通过这张图,有没有发现一些规律呢?
    对于10进制而言:10到100需要乘以十进制的10,1000到10000也需要乘以10
    对于2进制而言:每加一个0都需要乘以二进制的2,所以用2的指数来表示。
    例如 10000000,1后面有7位,就可以用2的7次方表示。

    我们列张图,大家来比较一下十进制乘10和二进制乘2的运算结果:
    在这里插入图片描述

    3. Java中的byte类型

    java 中的 byte 类型整数是单字节类型,也就是说,它使用 8 位(bit) 来表示整数。

    8 位(bit)能表示的数字:

    在这里插入图片描述
    但是!!!java中byte类型的左侧的一位规定用来表示符号,0表示正数,1表示负数。那么它表示数字的位就只有7位,而不是8位,所以:

    java 中 byte 类型正数的表示:

    在这里插入图片描述

    java 中 byte 类型负数的表示:

    java 的 byte 类型如何表示负数?最小值-128.符号位是1,其余7位是0,得10000000
    那-128+1得-127,表示为10000001,那么可以以此类推,继续执行加1运算加到负数的最大值:11111111,如下图所示:
    在这里插入图片描述

    4. Java中整数类型的最小值与最大值

    与 byte 类型相同,short,int 和 long 也是用相同的方式表示整数。
    这四种类型的最小值和最大值分别可以这样表示:

    4.1 byte(1字节,8位):

    2进制 2的指数
    最小 10000000 -2^7
    最大 01111111 2^7 - 1

    4.2 short(2字节,16位):

    2进制 2的指数
    最小 10000000 00000000 -2^15
    最大 01111111 11111111 2^15 - 1

    4.3 int(4字节,32位):

    2进制 2的指数
    最小 10000000 00000000 00000000 00000000 -2^31
    最大 01111111 11111111 11111111 11111111 2^31 - 1

    4.4 long(8字节,64位):

    2进制 2的指数
    最小 10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 -2^63
    最大 01111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 2^63 - 1

    大概了解了二进制后,我们来学习一下常用进制之间是怎么转换的吧!

    进制之间的转换

    展开全文
  • 主要介绍了Linux bash:./xxx:无法执行二进制文件报错,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着编来一起学习学习吧
  • 主要介绍了C++学习结之二进制转换的相关资料,需要的朋友可以参考下
  • 主要介绍了python十进制和二进制的转换方法(含浮点数),编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随编过来看看吧
  • 二进制-文本互转工具

    2017-12-05 16:11:43
    基于MFC编写的二进制和文本相互转换工具,可实现将二进制格式存储的0x12 34转换成文本"12 34"(Ascii码),也可以将文本的"12 34"(Ascii码)转换成二进制的0x12 34。
  • 十进制转换为二进制(短法)

    千次阅读 2020-06-30 15:20:47
    十进制转换为二进制(短法) 存储每一步短后的商和余数,商为1时为止 """ 用于实现十进制转二进制、八进制、十六进制: """ def DchangB(num): """短法将十进制转换为二进制""" # 商为1则停止,要存储每一步...
  • 数组转二进制小工具数组转二进制小工具数组转二进制小工具数组转二进制小工具数组转二进制小工具数组转二进制小工具数组转二进制小工具
  • 关于遗传算法的一个二进制编码的计算函数最大值的实例
  • 项目需要生成程序码给前端,生成二维码接口微信服务器直接返回二进制数据流,因为前后端接口是json格式同时业务服务器不能保存图片再给前端访问,需要json返回二进制图片数据 尝试直接返回二进制,字符太长无法...
  • 一 获得二进制文件的大小 1 代码 #include <iostream> #include <fstream> using namespace std; const char * filename = "afile.dat"; int main() { long l, m; ifstream file(filename, ios::...
  • C 语言读取二进制文件大小

    千次阅读 2017-10-18 19:16:56
    函数一:fseekstdio的库函数:函数原型:int fseek(FILE *stream, long int offset, int whence);功能:设定文件指针的位置参数:stream: 需要读取的文件流。whence:文件源指针的位置,值可以是这三个的一个:...
  • 计算机二进制小数

    千次阅读 2021-07-26 00:17:49
    前言理解浮点数的第一步是考虑含有数值的二进制数字十进制小数首先看一下十进制的小数的表示,举例十进制数:12.3412.34 === 1 * 101 + 2 * 100 + 3 * 10-1 + 4 * 10-2 === 12二进制小数类比十进制小数表示形式...
  • Lua程序十六进制字符串和二进制数据间的转换[借鉴].pdf
  • 二进制编辑是可以读写及编辑
  • 十进制转二进制小工具.exe
  • 个人原创软件,MFC界面,可以任意转换64bit数据到2进制、10进制、16进制,2进制可以直接查看任意bit,取0~63之间的任意区间值,并且支持取位、移位大小端转换、加、减、乘、、取余、与、或、非等计算,支持GB2312Z...
  • C语言二进制字符串与十六进制字符串相互转化,利用MFC框架生成工具。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,130,664
精华内容 452,265
热门标签
关键字:

二进制中小除大