二进制的减法

二进制的减法注:正数的补码是其自身负数的补码是其反码+1这里需要说明的是,在计算机中做二进制数运算时,一定要明确是在多少位的整型前提下进行的,这样才能够正确处理位数溢出的问题。其实减法也可以看成加法6+(-4)无论加减法总结:补码相加结果再求补码1表示负0表示正在计算机中,负数是使用它的补码来表示的。所谓补码,就是反码+1。所谓反码,就是二进制数逐位取反。所谓逐位取反,就是1变成0,0变成1。例如:原来的二进制数:1011011101101反码:01001000100..

大家好,又见面了,我是你们的朋友全栈君。

注:正数的补码是其自身 负数的补码 是其反码+1

这里需要说明的是,在计算机中做二进制数运算时,一定要明确是在多少位的整型前提下进行的,这样才能够正确处理位数溢出的问题。

其实减法也可以看成加法 6+(-4)

 

无论加减法总结:补码相加 结果再求补码

1表示负

0表示正

 

在计算机中,负数是使用它的补码来表示的。所谓补码,就是反码+1。所谓反码,就是二进制数逐位取反。所谓逐位取反,就是1变成0,0变成1。例如:

原来的二进制数: 1011011101101反码: 0100100010010补码: 0100100010011

 

在数学里面,当我们判断一个正数和负数的时候,是通过这个数字前面的负号来判断的,例如: 5和 -5。但是由于计算机里面只有0和1,如何表示负号呢?因此可以使用一个额外的1来表示。例如:

正数: 0101负数: 1101

其中最左边的0和1表示的是符号位,0为正数,1为负数。

如果到这里,你以为你看懂了,那么我问你一个问题,下面几个数有什么区别:

0101

00101

000101

0000101

00000101

下面几个数有什么区别:

1101

10101

100101

1000101

10000101

实际上,他们表示的是不同位数条件下的同一个数。因为在计算机中,你定义一个数字的时候,是需要先提前指定这个数的类型的。例如int型、long型等等。(即便你用的Python,不需要人工指定,但是在底层它也会自动指定)。所以,如果我直接说:数字5在计算机中是怎么储存的,是没有意义的。应该说,数字5在8位整型下面是怎么储存的、在32位整型下面是怎么储存的:

00000101 # 8位整型

00000000000000000000000000000101 # 32位整型

所以,对于-5,在8位整型和32位整型下面,他们是这样储存的:

10000101 # 8位整型

10000000000000000000000000000101 # 32位整型

在计算机中,一个正数的补码就是它自身,例如 00000101的补码还是 00000101,而负数的补码,就需要根据补码的规则进行计算,例如在8位整型下,-5的补码运算规则如下:

1.首先计算正5的二进制数:00000101

2.逐位取反:11111010

3.加1:1111011

 

接下来,例如我们在8位整型下,计算9-5的值,那么在计算机中,运算过程为:

1.求9的二进制补码(正数的补码就是它自身):00001001

2.求5的二进制补码:11111011

3.两个补码相加:100000100

4.由于我们是在8位整型的环境下,所以最左边这个1被直接丢掉了(溢出),结果变成:00000100

5.对结果再求补码。由于结果00000100最左边是0,表示正数,所以补码是自身。因此二进制数00000100对应的十进制数为4,就是正确结果。

 

再来看看8位整型条件下:10 – 13 = -3的过程:

1.计算10的二进制数补码:00001010

2.-13的二进制补码:11110011

3.两个补码相加:11111101

4.对结果求补码,由于最左边这一位是1,表示负数,所以要把十进制负数转二进制补码的过程反过来

5.先转成十进制正数对应的二进制数:00000011为3

6.把负号加上:-3,答案正确

 

这里需要说明的是,在计算机中做二进制数运算时,一定要明确是在多少位的整型前提下进行的,这样才能够正确处理位数溢出的问题。

由于位数溢出,在计算机中才会出现两个正数相加,结果却是负数的情况。例如:

127 + 1,在数学上结果为128,但是在计算机中,8位整型的情况下,结果为-128。原因如下:

1.计算127对应的二进制补码:01111111

2.计算1对应的二进制补码:00000001

3.两个补码相加:10000000

4.由于结果的最左侧为1,表示负数,因此要把十进制负数转二进制补码的过程反过来

5.先转成十进制正数对应的二进制补码:10000000(没错,10000000的补码恰好还是10000000)也就是128

6.加上负号:-128

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150094.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Spring Data JPA (Oracle)基础使用「建议收藏」

    Spring Data JPA (Oracle)基础使用「建议收藏」SpringDataJPA基础使用学习了尚硅谷的jpa在线视频教程,结合其他资料后动手实践的成果。 1.环境搭建Maven环境,在pom.xml中加入相关hibernate,spring,jdbc,slf4j-log4j12,json-lib,testng的jar包2.Spring配置文件说明配置文件放置位置,在classpath设定的目录下建个resources文件,放s…

    2022年5月7日
    43
  • 莫比乌斯反演的两种形式及其证明

    莫比乌斯反演的两种形式及其证明莫比乌斯反演形式一 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 证明 把代入右边的式子 得 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 根据莫比乌斯函数的性质 有定理 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 因此 只有

    2025年6月28日
    2
  • java有序map[通俗易懂]

    java有序map[通俗易懂]我们知道TreeMap的key是有顺序的,是自然顺序,也可以指定比较函数。但TreeMap默认不是按插入的顺序。为了让Map按照插入顺序显示,可以使用LinkedHashMap吧。它内部有一个链表,保持插入的顺序。迭代的时候,也是按照插入顺序迭代,而且迭代比HashMap快。转载于:https://www.cnblogs.com/lixiaoran/p/6780898.html…

    2022年9月24日
    2
  • mysql根据经纬度计算距离函数_根据两点经纬度坐标计算距离

    mysql根据经纬度计算距离函数_根据两点经纬度坐标计算距离方式1:st_distance_sphereSELECT*,st_distance_sphere(point(lng,lat),point(116.3424590000,40.0497810000))asjuliFROMtableORDERBYjuliASC没用除以1000,所以是以米为单位方式2:st_distanceSELECT*,(st_distance(point(lng,lat),point(116.3424590000,40.0497810000))*1

    2022年9月24日
    3
  • 深度学习PyTorch,TensorFlow中GPU利用率较低,CPU利用率很低,且模型训练速度很慢的问题总结与分析

    深度学习PyTorch,TensorFlow中GPU利用率较低,CPU利用率很低,且模型训练速度很慢的问题总结与分析在深度学习模型训练过程中,在服务器端或者本地pc端,输入nvidia-smi来观察显卡的GPU内存占用率(Memory-Usage),显卡的GPU利用率(GPU-util),然后采用top来查看CPU的线程数(PID数)和利用率(%CPU)。往往会发现很多问题,比如,GPU内存占用率低,显卡利用率低,CPU百分比低等等。接下来仔细分析这些问题和处理办法。1.GPU内存占用率问…

    2022年6月12日
    215
  • Java获取本机IP

    Java获取本机IP

    2021年6月20日
    94

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号