`

补码 左移与右移 32位系统

阅读更多

 

 

QQ:797801

计算机中的-2就是11111110b,而数学上的-2没法在计算机中直接存储,所以就有个算法来计算应该怎么存储。就是正数的反码+1,因为这个数正好加上原来的正数=0(溢出部分不管)

 

 

首先,你要理解,计算机里面没有负数的概念,所有数都是无符号数。但是逻辑上有负数,怎么办呢?让他计算正确就OK了,那么负数就成正数取反+1了

 

你别太关心啥补码,反码的。容易搞晕。
计算机里面。你关注哪个无符号数+2正好溢出,那么那个数就是-2,因为他+2=0

 

 

所以别把数学上直接搬上来套,越搞越晕。
反正我的理解就是计算机里面根本就不管你负数啥的,全是无符号数,只是为了让我们更加方便的处理数学问题,引入了符号位这些概念

 

 

你算算补码怎么来的吧。
2=00000010b,然后取反11111101b+1=11111110b

 

-2=0xFFFFFFFE,你不管算数右移多少次都是-1

 

说了,计算机不管你有符号无符号的。计算结果的最高为是1,就会给你设置SF,至于你去不去看SF是你的事情; 

 

 

---------------------------------------------------------------------------------

QQ:149955923

如果你声明一个负数变量,计算机会将你这个变量变成2进制,然后取反+1

 

计算机在底层微电子元件中没有设计负数的电路,所以用正数的补码来表示负数

 

计算机中的-2就是11111110b,而数学上的-2没法在计算机中直接存储,所以就有个算法来计算应该怎么存储。就是正数的反码+1,因为这个数正好加上原来的正数=0(溢出部分不管)

 

 

 

网友推荐的书:

巨神之碑文(149955923)
我推荐Intel汇编程序设计  讲的非常详细

 

黑无止境(546515315)
我推荐天书夜读,里面有C语言在内存中的贮存方式

 

黑无止境(546515315)
还有一本 深入理解计算机体系结构 这本书讲的是从C语言程序员的角度去看待操作系统的内存结构

 

 

 

 

---------------------------------------------------------------------------------------------------------

 

转自:http://zhidao.baidu.com/question/51147577.html?fr=ala0

 

问:二进制负数的补码的原理
为什么要用补码的形式改更负数
如何掌握它的用法?

 

 

 

1、在计算机系统中,数值一律用补码来表示(存储)。
主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补
码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
2、补码与原码的转换过程几乎是相同的。
数值的补码表示也分两种情况:
(1)正数的补码:与原码相同。
例如,+9的补码是00001001。
(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。
例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对值+7的原码
0000111按位取反为1111000;再加1,所以-7的补码是11111001。

 

 

 

 

 

--------------------------------------------------------------------------------

 

经以上整合,自己得结论如下:

(1) -4 >> 1 结果是-2;

(2) -4 >>2  结果是-1;

 

计算过程如下:

4的原码:0x0000 0004;==>除符号位0外,其他按位取反加1===>(符号位变为1),得:

-4的补码是:0xFFFF FFFC;

那么-4进行右移1位,得:0xFFFF FFFE;(这个再进行取反加一,即可得到它的整数值为-2);--一个负数的补码,再次进行求补码则可还原其原码;

 

 

 

也可通过debug.exe来查看-4的补码是多少

cmd==>debug

==>a命令

==>mov ax,-4

==>回车,再回车

==>t

即可查看到ax=FFFC  (即计算机里是以补码形式进行存储负数)

 

 

 

分享到:
评论

相关推荐

    循环移位补码.rar

    选择结果类型,如果选择循环移位,输入循环移位数值(正数右移,负数左移),针对 [a, b]区间内的每个数值n,先将十进制变成二进制,按照指定数值(正数右移,负数左移)循环移位,再将二进制结果转换成十进制,输出...

    C语言位运算+实例讲解

    C语言位运算 有6种: &, | , ^(亦或), <...作用:实现二倍乘除运算(右移几位相当于除于二的几次方。左移几位,相当于乘上二的几次方。) 问题:int是有符号类型,左移可能会把符号左移出去,发生溢出。

    程序员计算器、进制转换、进制混合计算

    方便实现二进制、八进制、十六进制、十进制之间的转换和简单计算,免去手工转换后再计算的麻烦 ... 输入二进制、八进制、十六进制、十进制...支持的常规的一些运算:加、减、乘、除、与、非、或、异或、补码、左移、右移

    Proteus8 LED应用实例分析

    移位:移位运算符有双目移位运算符:(左移)和 >>(右移)。 左移运算是将一个二进制位的操作数按指定移动的位数向左移位,移出位被丢弃,右边的空位一律补0。右移运算是将一个二进制位的操作数按指定移动的位数向...

    java byte相互转换详解左右位移

    java基本类型转byte,设计原码、补码、反码、左右位移等知识,赚点积分

    JAVA基础之java的移位运算

    所有的整数类型以二进制数字位的变化及其宽度来表示。例如,byte 型值42的二进制代码是00101010 ,其中每个位置在此代表2的次方,在最右边的位以20开始...注意右移后的值与0x0f进行按位与运算,这样可以舍弃任何的符号...

    c语言程序设计标准教程

    第15行使用了复合的位运算符"&=", 该行相当于: pbit->b=pbit->b&3位域b中原有值为7,与3作按位与运算的结果为3(111&011=011,十进制值为3)。同样,程序第16行中使用了复合位运算"|=", 相当于: pbit->c=pbit->c|1...

    ALU实验报告.doc

    " "SLL "A sll B "逻辑左移B位 " "SRL "A srl B "逻辑右移B位 " "SRA "A sra B "算术右移B位 " "ROL "A rol B "循环左移B位 " ALU的输入数据为16位,操作码op为4位,算术运算时数据用补码表示。 实验步骤 本实验通过...

    vs没报错leetcode报错-JavaDataStructure_Algorithm:这个repo包含我目前正在学习的java笔记和leet

    vs没报错leetcode报错Java - 数据结构和算法以及 ...二进制补码:二进制负数, 递归 递归:函数直接或间接调用自身 直接的 间接 - 来自另一个功能 - 不常见 基本情况:应该在某人处,函数应该停止调用

    华中科技大学计算机组成原理实验.zip

     利用logisim平台中现有运算部件构建一个32位运算器,可支持算数加、减、乘、除,逻辑与、或、非、异或运算、逻辑左移、逻辑右移,算术右移运算,支持常用程序状态标志(有符号溢出OF、无符号溢出CF,结果相等...

    程序员二进制计算器 v1.36

    支持与、或、非、异或、移位(循环、逻辑、算术),直接读写二进制位,指定位段读、写、置1、清0、反转。 二进制数据表达方式多样,数据可以K、M、G等单位为后缀。 支持类C语言库函数调用。 结果可以各种进制、各种...

    多周期处理器:从头开始的16位定制多周期CPU

    立即寻址加载,存储,无条件分支,带链接的分支,分支间接,带链接的间接分支,零分支,非零分支,进位分支设置,分支是否进位清除,向右旋转,向左旋转,算术右移,逻辑右移,逻辑左移,加法,减法,逻辑与,逻辑或...

    汇编语言程序设计.林邦杰.陈明

    11-10 算术左移及算术右移 11-11 循环位移 11-12 位移及循环位移指令总结 11-13 综合例题 课后习题 第12章 文件处理 12-1 输入及输出层次 12-2 输入及输出概念 12-3 标准的文件代号 12-4 建立一个文件代号 12-5 打开...

    温度报警器

    //右移4位 x=x&0x0f; //和前面两句就是取出t[0]的高四位 t[1]=t[1]|x; //将高低字节的有效值的整数部分拼成一个字节 if(t[1]>TH) { power=0; } if(t[1]) { power=1; } TempBuffer1[1]=t[1]/...

    cod:深奥的编程语言 Deadfish 的 C 实现,并添加了一些内容

    b - 二进制二的补码值 q - 值的平方根 r - 右移值 l - 左移值 & - 将值转换为值的指针 n - 打印编号 e - 擦除值 4 - 将值减为零,同时沿途打印每个 ASCII 值 5 - 执行与4相同的操作,但之后将值重置为其原始数字 6 ...

Global site tag (gtag.js) - Google Analytics