原码,补码,二进制减法计算_二进制的原码和补码

原码,补码,二进制减法计算_二进制的原码和补码这篇博客从一道题说起,已知x = (1<<31)-3,求x&-x?这里面考察了二进制的减法,减法也就牵涉了原码补码的一些概念。这里进行下梳理。 一。原码,补码概念1.原码就是早期用来表示数字的一种方式。一个正数,转换为二进制位就是这个正数的原码。负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码例如:假设机器是32位系统,in…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

这篇博客从一道题说起,

已知 x  = (1<<31)-3,求x&-x?

这里面考察了二进制的减法,减法也就牵涉了原码补码的一些概念。

这里进行下梳理。

 

一。原码,补码概念

1.原码就是早期用来表示数字的一种方式。

一个正数,转换为二进制位就是这个正数的原码。

负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码

例如:假设机器是32位系统,

int类型的 3 的原码是 00000000 00000000 00000000 00000011

对于int类型的-3的原码是00000000 00000000 00000000 00000011高位补1得到10000000 00000000 00000000 00000011

2.反码

正数的反码就是原码,负数的反码等于原码除符号位以外所有的位取反

int类型的 3 的反码是 00000000 00000000 00000000 00000011,和原码一样

int类型的-3的反码是11111111 11111111 11111111 11111100

3.补码

正数的补码与原码相同,负数的补码为其原码除符号位外所有位取反(得到反码了),然后最低位加1.

int类型的 3 的补码是 00000000 00000000 00000000 00000011

int类型的 -3 的补码是 11111111 11111111 1111111 11111101

过程:10000000 00000000 00000000 00000011除符号位取反

       -> 11111111 11111111 1111111 11111100 再加1

       -> 11111111 11111111 1111111 11111101

总结来说,求负数补码有两种方法。

(1)正数原码求反+1

(2)负数原码除符号位求反+1

 

二。二进制减法

原码,补码,二进制减法计算_二进制的原码和补码

在运算过程中,从右往左逐位进行计算。 
(1)1-0=1; 
(2)0不够减1,向前借1后加2变成2;2-1=1; 
(3)0在上一步被借1所以减为-1,-1不够减0,向前借一后加2变成1;1-0=1; 
(4)在上一步被借一所以减为0,0不够减1,向前借一后加2变成2;2-1=1; 
(5)在上一步被借一所以减为-1,-1不够减1,向前借一后加2变成1;1-1=0; 
(6)在上一步被借一所以减为0,0-0=0. 
 

三。开头题目

(1) 求1<<31:10000000 0000000 00000000 00000000

(2)减去3: 

   10000000 0000000 00000000 00000000

-00000000 00000000 00000000 00000011

= 01111111 11111111 11111111 11111101 即 x

(3)求x&-x

首先求-x的外码(参考资料3),x原码求反+1,得到10000000 00000000 00000000 00000011

01111111 11111111 11111111 11111101&10000000 00000000 00000000 00000011 = 1(答案)

 

四。参考资料:

1.正数的原码,反码,补码

2.二进制减法

3.计算机负数与正数的按位与操作

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

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

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


相关推荐

  • java静态内部类和非静态内部类的区别_静态内部类有什么问题

    java静态内部类和非静态内部类的区别_静态内部类有什么问题一、非静态内部类:1、变量和方法不能声明为静态的。(类的编译顺序:外部类–静态方法或属性–内部类,如果内部类声明为静态的,造成编译顺序冲突。个人理解)2、实例化的时候需要依附在外部类上面。比如:B是A的非静态内部类,实例化B,则:A.Bb=newA().newB();3、内部类可以引用外部类的静态或者非静态属性或者方法。二、静态内部类:1、属性和方法可以声明为静态的或者非静态的…

    2022年10月11日
    3
  • Google Buzz 里 90% 的内容都是 “非人类”「建议收藏」

    Google Buzz 里 90% 的内容都是 “非人类”「建议收藏」距GoogleBuzz发布还不到10周,尽管Google一直在改进它,但似乎人们还是没有陷入Google的社交圈子。来自PostRank的统计,有90%的GoogleBuzz都是机器人发出来的,其中最多的是从twitter同步过来的内容,占到62%还多,而来自feeds的也有26%多,尽有不到11%的内容是真实的人肉发出来的。也就是说,GoogleBuzz的用户们还是习…

    2022年10月15日
    2
  • 计算机组成原理期末复习【超实用】「建议收藏」

    计算机组成原理期末复习【超实用】「建议收藏」计算机组成原理(第二版)唐朔飞编著(课本有些地方还不错,可以下载电子版看看)五道解答题30‘=9’(9个知识点)+6’+6’+4’+5’我依据老师的考题范围手动整理,有什么问题or想添加的知识点请在评论下方留言!实时更新,助诸位共进步!一、解答题1.影响流水线性能的因素主要有哪几种?请简要加以说明。P348结构相关:是当多条指令进入流水线后,硬件资源满足不了指令…

    2022年5月31日
    33
  • Windows 8系统中***客户端812错误的解决方法

    Windows 8系统中***客户端812错误的解决方法

    2021年8月27日
    66
  • 如何写好缺陷报告「建议收藏」

    如何写好缺陷报告「建议收藏」今天开始和大家分享缺陷报告的内容,在这部分会讲一下缺陷的基本属性,缺陷的处理过程和如何书写缺陷报告。一、什么是缺陷在第一章我们说过了什么事缺陷,一切不满足用户需求的都是缺陷。下面我们对缺陷的概念在详细的介绍一下。佩腾在《软件测试》一书中说符合下面5个规则的就可以成为软件缺陷:1、软件未达到产品说明书标明的功能。2、软件出现了产品说明书中指明不会出现的错误。3、软件功

    2022年9月18日
    2
  • CC2530: ZigBee协议栈实践例程(一)

    CC2530: ZigBee协议栈实践例程(一)1.ZigBee版本      ZigBee是ZigBee联盟建立的技术标准。第一个ZigBee协议栈规范于2004年发布,称为ZigBee2004或者ZigBee1.0;第二个ZigBee协议栈规范于2006年发布,称为ZigBee2006;第三个ZigBee协议栈规范于2007年发布,称为ZigBee2007;然后呢?现在是2018年了。。。2.Z-Stack版本    …

    2022年5月28日
    33

发表回复

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

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