补码反码掩码以及原理
补码、反码和掩码是计算机科学中用于表示和处理数值的三种编码方式。
原码
原码是最直观的数值表示方法,它将数值的二进制表示与其符号位结合起来。在原码表示中,正数的符号位为0,而负数的符号位为1。原码的缺点在于它无法直接表示负数,因为在计算负数的时候需要进行特殊的处理。
反码
反码用于简化负数的运算。对于正数,其反码与原码相同;对于负数,反码是将原码除符号位外的所有位取反(0变1,1变0)。反码解决了原码在进行加减运算时需要额外的符号位转换的问题,但它仍然存在正负零的区分问题。
补码
补码是目前计算机中最常用的数值表示方法。对于正数,补码与原码相同;对于负数,补码是在反码的基础上加1。补码的优点在于它将符号位的概念和数值的表示统一起来,并且使得加法和减法运算统一化,简化了计算机内部的逻辑电路设计。
下面顺便提一嘴掩码,不过多赘述。
掩码
掩码通常用于位操作中,它是一个用于遮掩或选择特定位数的二进制数。在计算机编程中,掩码常用于位运算,比如设置或清除特定的位。通过掩码,可以很方便地控制数值的某几位是否参与运算或被设置为特定的值。
例如,如果要设置一个整数的第3位到第5位,可以构造一个掩码,其中只有这些位是1,其余位是0。然后将这个掩码与整数进行按位与操作,就能达到设置这些位的目的。
综上所述,补码、反码和掩码都是计算机中数值表示和处理的重要工具,它们各有特点和应用场景。补码广泛应用于计算机中的数值计算,反码在某些特定的数学运算中有所应用,而掩码则主要用于位操作和特定位的控制。
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
C语言代码实例代码解释原码反码补码
解释:计算机里面进行数值的计算往往是补码进行计算,也就是在计算机里面进行计算是32位,如果数值是正整数的情况下32位的初始位从左到右的第一个位是0也就是符号位,如果是负数的情况下,从左到右初始位也就是符号位是1。
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
画图实例:
计算机是如何计算的
在计算机计算数值里面,计算机会把数值计算成
这里我们拿代码进行举例
这里是正数的数值 正数的数值原码反码补码的数值是一样的
这里的数值是10来进行举例
这里需要知道的是,计算机进行计算转换的时候是把十进制的数值转换成二进制,然后把二进制计算成补码然后进行计算。
正数的计算是原码反码补码是一样的。
负数的原码反码不一样是有计算过程的
是在原码的基础上 取反+1
如图
这里我们需要知道,计算的时候数值是由32位的比特位组成,从右边向左边进行加减,也就是正常的加减乘除。如果是类型不一样的情况下,则会进行截断,也就是丢失数据,下面会进行讲解。
计算机运用符号,按位与或者按位或计算期间是利用补码进行计算
计算完毕之后返回原路 也就是之前是取反+1
补码计算完成之后需要 补码取反+1 变成原码 呈现给你看
需要知道 32位 最前面的是符号位 0是正数 1是负数
——————————————————————————————————————————————————————————————————————————————————————
下面我们举两个例子
拿这个来举例
举例1:
代码解释
所以-1是最特殊的 32位1
下面会剖析为什么是32位
举例2:
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
计算里面为什么是32位
32位环境
通常指的是一个计算机系统或操作系统的架构,其中处理器、内存地址以及其他硬件和软件资源都使用32位二进制数来表示。这意味着该系统可以处理的数据量最大为2的32次方(即4,294,967,296)个不同的值。
在32位环境中,
处理器的寄存器、内存寻址以及其他硬件参数都是32位的。这影响了系统的地址空间大小、可以处理的数据量以及可以同时运行的程序的大小。例如,32位系统上的内存地址空间最大为4GB(2的32次方字节),尽管实际上由于各种系统开销,可用内存可能少于这个量。
32位环境也可以指编译器或编程语言的执行环境,例如,某些编译器或编程语言可以在32位操作系统上运行,或者专门为32位处理器优化。
在操作系统方面
32位操作系统是指系统核心以及运行在系统上的应用程序都是为32位硬件环境设计的。这包括Windows XP、Windows 7等,它们都可以在32位处理器上运行。
在编程语言和工具方面,32位环境可能涉及到汇编语言、C语言、C++等编程语言,以及相关的开发工具和库,它们都是针对32位处理器架构的。
这里涉及到一些指针的知识简单的理解就是
首先,必须理解,计算机内是有很多的硬件单元,而硬件单元是要互相协同工作的。所谓的协同,至少相互之间要能够进行数据传递
但是硬件与硬件之间是互相独立的,那么如何通信呢?答案很简单,用"线”连起来
而CPU和内存之间也是有大量的数据交互的,所以,两者必须也用线连起来
不过,我们今天关心一组线,叫做地址总线
计算机中的编址,并不是把每个字节的地址记录下来而是通过硬件设计完成的。
钢琴、吉他 上面没有写上"剁、来、咪、发、唆、拉西”这样的信息,但演泰者照样能够准确找到每一个琴弦的每一个位置,这是为何?因为制造商已经在乐器硬件层面上设计好了,并且所有的演奏者都知道。本质是一种约定出来的共识!
硬件编址也是如此
32位机器有62根地址总线,每根线我们可以简单理解只有两态,表示0,1[电脉冲有无],那么一根线,就能表示2种含义,2根线就能表示4种含义,依次类推。32就能表示2^32种含义,每一种含义都代表一根地址线个地址
地址信息被下达给内存,在内存上,就可以找到该地址对应的数据,将数据在通过数据总线传入CPU内寄存器。
简单说就是每一个数值代表一个信号 比如01代表信号 11代表信号
可以简单理解为32位就是 2的32次方个信号
这里就可以理解为