精华内容
下载资源
问答
  • 二进制表示方法推导

    2020-03-18 22:30:06
    二进制运算 内容摘自 计算机组成原理第六章,与部分网络文章。 本片先考虑整数的情况,小数后续会有补充、 学校没学好的 到工作了都要补 计算机中参与运算的数有两大类:无符号数和有符号数 无符号 计算机中的数均...

    二进制运算

    内容摘自 计算机组成原理第六章,与部分网络文章。
    本片先考虑整数的情况,小数后续会有补充、
    学校没学好的 到工作了都要补

    计算机中参与运算的数有两大类:无符号数和有符号数

    无符号

    计算机中的数均放在寄存器中,通常称寄存器的位数为机器字长。当存放有符号数时,则需要留出位置存放符号。因此有符号的和没符号的所对应的数值不同。比如说32位 无符号0~4,294,967,295 有符号-2,147,483,648~ +2,147,483,647

    有符号

    用0表示正 1表示负

    源码表示法

    整数

    整数源码定义为
    [x]={0,x2nx02n10x2n[x]=\left\{ \begin{aligned} 0,x & & {2^n \geq x \geq 0}\\ 2^n-1 & & {0 \geq x \geq -2^n} \end{aligned} \right.
    其中x 为真值,n为整数的位数。
    例如
    x=+1110[x]=0,1110当 x= +1110 时 [x]_原 = 0,1110
    x=1110[x]=24(1110)=1,1110当x = -1110 时 [x]_原= 2^4-(-1110)=1,1110

    原码就其符号位加其本身

    补码表示法

    补码的概念

    比如时钟,当时针指向6点 我需要 调到3点 有两种方式一种是 顺时针转9格,一种是逆时针转3格。假设顺时针转动为正逆时针转动为负则:
    63=36+9=15 6-3 = 3\\ 6+9 =15
    因为时钟只有12个小时且这个12在时钟是不显示的所以有1512=315-12=3 所以15点为3点。这样-3和-9对时钟其作用是一样的。在数学上称12的模,写作mod12。称+9是-3以12为模的补数。

    A=9B=5AB(mod12):AB=95=4125+7AB=9+7=161212164416(mod12)4162844+124+24举 A=9 B=5 求 A-B\pmod{12}\\ 解:\\ A-B=9-5=4\\ 对模12而言 -5 的补数为+7\\ 所以 A-B=9+7=16 \\ 对模12 而言 12自动忽略 16等价与4 即 4\equiv16\pmod{12}\\ 进一步分析 \\ \quad4\equiv16\equiv28\\ \quad4\equiv 4+12 \equiv4+24
    说明整数相对于“模”的补数就是正数本身。
    这个概念可以用到任意模上

    由此可以得出

    • 正数的补数是它本身
    • 负数的补数是模加上负数本身求得
    • 一个正数跟一个负数互为补数时,它们绝对值之和即为这个模。

    二进制补码

    整数

    整数源码定义为
    [x]={0,x2nx02n+1+x0x2n(mod2)[x]=\left\{ \begin{aligned} 0,x & & {2^n \geq x \geq 0}\\ 2^{n+1}+x & & {0 \geq x \geq -2^n} \pmod{2} \end{aligned} \right.
    x为值,n为整数的位数。
    例如:
    当x = +1010时,
    [x]=01010[x]_补=0,1010
    当 x=-1101时,
    [x]=2n+1+x=1000001101=1,0011[x]_补=2^{n+1}+x = 100000-1101=1,0011
    推导:
    x=1011[x]=24+1+x=1000001011=1,010124+125=11111+00001[x]=11111+0001+xxxx1x2x3x4(xi)01[x]=11111+00001x1x2x3x4=11111x1x2x3x4+00001=1xˉ1xˉ2xˉ3xˉ4+0001x=-1011\\ [x]_补=2^{4+1}+x\\ =100000-1011\\ =1,0101\\ 现在把2^{4+1} 改为2^5=11111+00001\\ [x]_补=11111+0001+x\\ 因为x是负数,若x用-x_1x_2x_3x_4表示,其中(xi)中不为0就为1于是\\ [x]_补\\ =11111+00001-x_1x_2x_3x_4\\ =11111-x_1x_2x_3x_4+00001\\ =1\bar x_1\bar x_2\bar x_3\bar x_4+0001

    由于负数x1x2x3x4-x_1x_2x_3x_4的源码为1x1x2x3x41,x_1x_2x_3x_4 所以负数求补数可以看为对每一位求反再+1

    反码

    整数

    整数反码定义:
    [x]={0,x2nx0(2n+11)+x0x2n(mod(2n+11))[x]=\left\{ \begin{aligned} 0,x & & {2^n \geq x \geq 0}\\ (2^{n+1}-1)+x & & {0 \geq x \geq -2^n} \pmod{(2^{n+1}-1)} \end{aligned} \right.
    x为值,n为整数的位数。
    推导:
    x=+1101[x]=01101x=1101,[x]=(x4+11)+x=111111101=1,0010当x=+1101时,\\ [x]_反=0,1101\\ 当x=-1101时,\\ [x]反=(x^{4+1}-1)+x=11111-1101=1,0010

    三种机器数值的最高位都为符号位。
    当真值为正时,原码、补码、反码的表示形势均相同。符号位由0表示
    当真值为负时,原码、补码、反码的表示形势均不同。符号位由1表示,而数值部分,反码为原码的每位求反,补码求反再加1。

    展开全文
  • 今天在看MIT公开课【编程范式】的时候发现二进制码补码只是不是很清楚,于是推一下 负数 原码 推 补码 注:t(原码),a(反码),c(补码) 拿15举例 15: 00000000 00001111 (t) 要推出-15 ,因为 15 + (-15)= 0 ...

    今天在看MIT公开课【编程范式】的时候发现二进制码补码只是不是很清楚,于是推一下


    负数 原码 推 补码

    注:t(原码),a(反码),c(补码) 

    拿15举例   15:   00000000 00001111 (t)

    要推出-15 ,因为   15 + (-15)= 0

    15:00000000 00001111 ,0 :00000000 00000000

    所以-15:

     00000000 00001111

           +

                              ?  (-15)

           =

     00000000 00000000    

    因为:

           11111111 11111111 + 1 = 00000000 00000000 

    所以我们先算出和为11111111 11111111的数,然后+1即可,也就是下面的a

     00000000 00001111

           +

                              a  

           =

     11111111 11111111

    即:

        00000000 00001111 各位取反:11111111 11110000(a,其实就是反码)

    于是:

     00000000 00001111

           +

              11111111 11110000(a)

           =

     11111111 11111111

    而a + 1 ,即 11111111 11110001 ,也就是与15相加得0的值

    于是就可得出:

     00000000 00001111

           +

              11111111 11110001 (c)

           =

     00000000 00000000

    而c 就是负数的补码

                (取反)      

    负数原码求补码     t --------> a  ------> a+1    =  c

                (取反)      

    负数补码求原码同理 c -------> c反 ------> c反+1  =  t 

    对于有符号的整数:

              原码t    反码a    补码c 

    正数  47  00101111  00101111  00101111

    负数  -47  10101111  11010000  11010001

    看两个例子:

    - 38 + 25 = -13

    原码:

        -38: 10100110 

    +

         25:00011001

    补码:

        -38:11011010

    +

         25: 00011001

    =  

        -13: 11110011(补码)->10001101(原码)

            

     38 - 25 = 13

    原码:

         38: 00100110

    +

        -25:10011001     

             

    补码:

         38: 00100110

    +

        -25:11100111

    =  

         13: 00001101(补码)->00001101(原码)

    转载于:https://www.cnblogs.com/cykun/archive/2011/08/21/2147788.html

    展开全文
  • 二进制中 : 1. 位宽不变的情况下, 模 加1等于0. 模表示所有的位数都是1, 例如位宽是2, 模就是11. 模加1就是 11b + 01b = 100b ,但是位宽不变, 只取低二位, 所以就是0 2. 模 = A + A的反码 ( 以下用 ~A 表示) , ...

    二进制中 :

    1. 位宽不变的情况下,膜 加1等于0. 膜表示所有的位数都是1, 例如位宽是2, 膜就是11.
       模加1就是 11b + 01b = 100b ,但是位宽不变, 只取低二位, 所以就是0

    2. 膜  = A + A的反码 ( 以下用 ~A 表示) , 例如 11 = 01 +10 , 但是这里 A 不能等于膜, 否则就是 A=A 没法继续计算求值. A是大于0的正数,


    所以

            模       = A + ~A

    =>   模  +1 =A + ~A +1
     
    =>   0        = A + ~A +1

    =>       -A  = ~A +1 (称作-A的补码)

    所以八位数的 -3 可以用 ~00000011+1=11111101表示,11111101就是-3的补码

    减 3就等于加上 -3 (注意是-3不是3) 的补码, 计算的时要有符号位, 算出来的数也是一个补码, 要恢复成原码看

    例如用8位, 包含1位符号位为例:
    (1)   5 - 3 =2 (可以看做是5加上 -3的补码)
    00000101 + 11111101= 00000010 (正数补码等于原码)

    (2)  3 -5 = -2  (-5 可以用-5的补码表示, 就是11111011)
    00000011 + 11111011 = 11111110(补码) = 10000010 (原码 = -2 )

    如果把公式改写成 - (5-3) 就免去了最后把补码转成原码的过程,只要将结果的符号位取反就行, 因为计算结果是正数, 补码等于原码
    -(00000101 + 11111101 )  = - ( 00000010 ) =  10000010 (原码 = -2 )

    (3) 如果是负数相加, 就转化为正数,例如 -3 -5 = - (3+5)

    展开全文
  • 二进制补码一位乘法规律的推导
  • 以前学习java的时候,二进制和位运算只停留在"懂"的程度,从来没有花时间去推导和总结,作为一个数学系的学生,一直想花点时间做推理证明java和python关于二进制和位运算的规则差不多,这次就当是补偿一、符号约定⌊...

    以前学习java的时候,二进制和位运算只停留在"懂"的程度,从来没有花时间去推导和总结,作为一个数学系的学生,一直想花点时间做推理证明

    java和python关于二进制和位运算的规则差不多,这次就当是补偿

    一、符号约定

    ⌊p⌋:比p小的最大整数,称为向下取整

    ⌈p⌉:比 p大的最小整数,称为向上取整

    xi:x在二进制下的第i位数

    二、二进制表示

    截取的  的图,推导过程使用求和公式来计算,思路差不多

    n这样理解:使得10n <= x 的最大的n值,bi的取值是一个集合

    三、移位运算<< 和 >>

    1、x,⌊x/2⌋,2x在二进制之间的关系

    2、推导结论

    结论一:x << k = 2kx

    结论二:  x >> k = ⌊x/2k⌋

    结论三:二进制的递推公式,这里理解下即可,python中用bin(n)函数可以直接打出n的二进制,如bin(123)打印为 0b1111011

    这点同java的

    Integer.toBinaryString(n),结果也是以0b开头

    四、按位运算

    位运算符只能适用于整数,总体运算规则为:

    首先把整数转换为二进制表示形式,按最低位对齐,短的高位补0,然后进行位运算,最后把得到的二进制转换为十进制结果

    以下四种:&,|,^,~,分别是与,或,异或,取反

    具体的例子就不说了,记几个思路清奇的应用

    1、判断奇偶数

    defisodd(x):return True if (x & 1) else False

    2、求下标x和y的中间值

    比如二分查找中的mid = (low+high) // 2 = (low+high) >>1

    3、异或运算交换a和b的值

    a ^=b

    b^=a

    a^= b

    4、异或运算找出单身汉

    在2N+1个自然数中,有N个数均出现2次,找出只出现1次的那个自然数

    方案:所有数做异或计算,最终的结果就是要找的那个数

    展开全文
  • 十进制与二进制都是数据记录的一种计数方法。对于一个数据,例如5555 可以写成5555 = 5 * 1000 + 5 *100+ 5*10+5*1  =5*10^3 +5*10^2+5*10^1+5*10^0 对于十进制来说,10就是十进制的基数,同理2就是二进数的基数。 ...
  • java中用补码表示二进制数,补码的最高位是符号位,最高位为“0”表示正数,最高位为“1”表示负数。正数补码为其本身;负数补码为其绝对值各位取反加1; 例如: +21,其二进制表示形式是0001 0101,则其补码...
  • 好多年前学过十进制转二进制的笔算过程,不过一直都没机会用上,很快就忘记了,最近因工作原因有几次需要做进制转换的计算,懒得上网查就根据记忆中模糊的印象瞎推导,搞着搞着就搞出了这样的推导方式,如图: ...
  • 例如:+21,其二进制表示形式是0001 0101,则其补码同样为0001 0101-21,按照概念其绝对值为0001 0101,各位取反为1110 1010,再加1为1110 1011,即-21的二进制表示形式为1110 1011byte范围推导步...
  • 软件工程中的逆向工程(reverse engineering)就是根据已经存在应用程序,反向推出软件设计时的数据和理念的过程,其最终目的是使软件...从二进制代码中恢复出高级语言层次的数据抽象和数据类型一直是逆向工程中的难题。
  • 本文先从基本概念出发,然后从基本概念推导出基础应用,然后再到算法题实战。层层推进,逐步迭代。本人水平有限,如有勘误,敬请指正。说明:本文会以Python的交互环境来做代码演示。关于本文的约定:非...
  • 在本文中,信道选择问题被转换为二进制优化问题,因此使用一种新颖的二进制差分进化(DE)算法来解决。 在提出的算法中,我们使用交换对的差分表定义了变异操作,并使用相邻的自交叉推导了试验解。 以这种方式,...
  • 51nod2657二进制数字

    千次阅读 2020-06-03 11:05:47
    2657 二进制数字 题目大意:长度为nnn的010101串,问总共有多少串满足不含三个连续的000或111,n<=1e5n<=1e5n<=1e5,输出答案取余1e9+71e9+71e9+7 方法一:找规律,可以发现a[i]=a[i−1]+a[i−2]a[i]=a[i-1]...
  • dao十进制转二进制是遵从版以下规则:权1、将整数部分辗转相除2,将余数倒序排列,即整数部分的二进制数。2、将小数部分辗转相乘2,将乘积的个位数部分正序排列,即小数部分的二进制数。推导过程如下:1、十进制0.25...
  • 本文讲的是Manticore:次世代二进制分析工具, Manticore在分析二进制文件的符号执行、污染分析(taint analysis)和instrumentation方面具有简单而强大的API。使用Manticore可以识别出特殊的代码位置,并推导出...
  • 今天看了java中的二进制操作,突然发现本科上电路课程的时候就没有理解计算机采用补码存储二进制数的原因,以及补码的推导。这次算是补课了。 1 补码的概念 正数的补码是其本身 负数的补码:原码-&gt;...
  • 提出了一种二进制差分随机过程键控的调制解调结构,推导出了在高斯信道和准静态衰落信道下的误比特率理论计算公式,并对系统进控 行了误比特率和二阶循环谱检测的仿真。仿真结果表明,提出的差分随机过程键,在高斯...
  • 解题思路:(1)模拟二进制转换。借鉴「列竖式」的方法,末尾对齐,逐位相加。逢二进一。 (2)位运算,可不使用加减乘除。(位运算的方式参考于官方题解) 3. 代码实现 class Solution(object): def add...
  • 针对全球导航卫星系统所使用的二进制偏移载波(BOC)调制信号存在跟踪模糊的问题,提出了一种最小均方误差预滤波(MMSES)无模糊跟踪方法. 在分析预滤波代价函数的基础上,首先推导经过相关后的噪声功率项表达式,...
  • 剩下的问题就是解决当N是偶数时,如何往基本情况递归了,简单分析一下任何一个偶数的二进制表示的最低位绝对等于0,,那么我们可以推导出一个简单结论:当N是偶数的时候,它二进制包含1的个数应该等于N+1包含的1的...
  • 下列算法完成对一个n位二进制数加1的操作(假如无溢出)。显然,该算法在最坏情况下的时间复杂度为O(n),试问平均情况下的时间复杂度是什么?请用数学推导或实验验证的方式证明你的结论。 void Inc(int A[]) { ...
  • 负数的二进制移位操作结果分析 研究移位操作符时候发现,负奇数右移一位,结果是向下取整的。比如-9 >>= 1 的结果是-5而不是-4。于是探索了一番运算过程。在此记录分享。 推导过程没有举例说明,因为个例...
  • 二进制运算中,对于某一位来讲: a∧b:表示a+b的本位a \wedge b:表示a+b的本位a∧b:表示a+b的本位 a & b:表示a+b应该进的位a\ \&\ b:表示a+b应该进的位a & b:表示a+b应该进的...
  • 使用循环神经网络(RNN)实现简易的二进制加法器 利用python实现简易的循环神经网络,并在一个小demo(8比特二进制加法器)上进行了验证,激活函数为logistic函数,利用反向传播算法进行训练。具体的算法原理以及...
  • 可以使用基于核函数的完善模型来输入最大长度序列(m序列),并使用互相关方法来估计非线性二进制核切片。 在这项研究中,我们研究了核切片的相关数学性质,特别是它们的移位和乘积性质以及由输入m序列与输入m序列...
  • 递归推导方法: 1位格雷码有两个码字(0和1) (n+1)位格雷码中的前2n个码字等于n位格雷码的码字,按顺序书写,加前缀0 (n+1)位格雷码中的后2n个码字等于n位格雷码的码字,按逆序书写,加前缀1 n+1...
  • 二进制矩阵中的最短路径题目大意解题思路代码实现 算法思想 深度搜索和广度搜索广泛应用于树和图中。 BFS一层一层的进行遍历,每层遍历都是以上一层的结果作为起点,遍历一个距离能访问到的所有节点,需要注意的是...
  • 更为一般性的推导,p(X)为被除式,q(X)为商式,r(X)为余式。不妨假设gn-k=1。 若被除式p(X)中Xn-k的系数为1,此时q(X)=1;r(X)=p(X)-g(X)=p(X)+g(X) 若被除式p(X)中Xn-k的系数为0,此时q(X)=0;r(X)=p(X) 经过一次...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 439
精华内容 175
关键字:

二进制推导