首页 > 其他分享 >原码、反码、补码的需要与理解

原码、反码、补码的需要与理解

时间:2023-01-01 10:11:43浏览次数:61  
标签:右移 反码 补码 负数 0000 原码

黑马笔记-原码、反码、补码的需要与理解

原码

十进制数字的二进制表现形式;第一位是正负,0为正,1为负;利用原码直接进行计算,正数计算无问题!而负数的计算利用原码计算会进行出错,解决这个错误的方法就是利用反码。(正数的原码、反码、补码都是相同的!)

反码

负数的反码就是符号位不变,数字位置取反:0变成1,1变成0。利用负数进行加减(符号位不参与),就可以得到正确的结果。但这在遇到负数计算到跨0的计算时,会出错。比如-5的反码(1111 1010),加6(0000 0110),会得到(0000 0000),本应得到1的结果却得到了0的结果(发现所有跨0的计算都比应得的结果小1,这是因为正反码概念中,0的表现有两种:+0和-0)!此时需要引入补码的概念!

补码

将-0的反码规定为-1的补码,-1的反码规定为-2的补码,依次类推。而0只有一种表现形式了。

而由于补码是由反码向下错开了一位,所以会多一个1000 0000的补码,人为规定其值为-128。这也是为何一个字节的取值范围为何是-128~+127!

计算机中数据的存储和计算都是以补码的形式进行的!

扩展:基本数据类型

规定8位是一个字节byte,所以其取值范围是-128~127!以此类推short、int、long的取值范围与占用的大小:

扩展:隐式转换、强制转换

byte、short、char等参与数值运算时,会隐式的转换成int类型,转换的形式就是在前补零!
强制转换就是强制的删除溢出部分!但需要注意!:正数的原码、反码和补码一致,但是负数的不一致,因此删除溢出后出现的可能就是负数!负数的话,实际上是补码形式!还要再转换回原码才能知晓结果!(见下下张图)

结果是-56(如果没有意识到存储是以补码的形式来进行的,那么容易得到-72这个结果!)

扩展:一些运算符!

属于扩展!自己用不到,但一些源码中可能会使用!

逻辑与&

逻辑或|

image

左移<<

向左移动,低位补0
规律:左移1次值会乘2
image

右移>>

高位补0,其中数值位补0,但首字母仍和原先值符号一致!
规律:右移1次值会除2!

无符号右移>>>

和右移一致,但是首字母符号位都补0!

标签:右移,反码,补码,负数,0000,原码
From: https://www.cnblogs.com/xiaoaozi/p/17017756.html

相关文章

  • 原码, 反码, 补码 详解
    一.机器数和真值在学习原码,反码和补码之前,需要先了解机器数和真值的概念.1、机器数一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是......
  • 原码、反码、补码
    原码、反码、补码在线计算:​​http://www.atoolbox.net/Tool.php?Id=952​​1、计算机中都是用"补码"表示在计算机系统中,数值一律用补码来表示(存储)。主要原因:使用补码,......
  • 原码 反码 补码
    只要是整数,内存中存储的都是二进制补码正整数的原码反码补码相同  000000000000000000000001(32位1)负整数:100000000000000000000001(32位-1)原码----->直接按正......
  • 计算机的原码,反码,补码
    我一直想为什么计算机中一定要规定有反码、补码?原码不能解决计算机的计算能力吗?反码,补码的出现解决哪些问题?带着这个问题,我对计算机知识进行脑补。原理因为计算机的一切都是......
  • 原码反码和补码的区别及用法笔记
    之前学习原码、反码、补码的时候就学的很懵,知道反码和补码怎么算的,但是不知道有什么用。今天看了几个视频,虽然有举例,但是自己换了个数就算不出来了。后来终于弄明白了。......
  • 补码4×4阵列乘法器设计
    视频讲解:https://www.bilibili.com/video/BV1ye4y1H7Ao/一、简述乘法运算在全部算数运算中大约占据三分之一,因此采用高速乘法部件,无论从速度上还是效率上,都十分必要。本......
  • PC_机器数_定点负数的原码_补码_反码在结构上的关系
    文章目录​​预备知识​​​​模2范畴内的取反​​​​证明二进制补码规律​​​​模k同余​​​​......
  • 原码、补码、反码的表示及计算
    今天简单总结了一下计算机的原码、补码、反码的表示,谨以此文缅怀教过我数字逻辑电路课程以及计算机组成原理课程的老师。一个数在计算机中的二进制表示形式我们称之为机器......
  • C - 原码、反码和补码
    原码计算机使用二进制编码存储数字.用第一个bit位表示符号,1表示负号,0表示正号.4个bit能够表示的数字:最小:1111→-7最大:0111→7但是原码不能进行加减......
  • golang获取补码,原码
    packagemainimport("encoding/binary""fmt""strconv")funcmain(){vara=[]byte{0x15,0x4B}varb=[]byte{0xE0,0x15}//fmt.Println(fmt.......