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

原码,补码,二进制减法计算_二进制的原码和补码这篇博客从一道题说起,已知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泛型深入理解「建议收藏」Java泛型,包括Java泛型的实现,泛型擦除以及相关面试题,通配符理解

    2022年6月23日
    20
  • 深入浅出Java8 Stream流:多实例详解

    深入浅出Java8 Stream流:多实例详解深入浅出多实例详解Stream流

    2022年9月28日
    3
  • pycharm:系统找不到指定文件[通俗易懂]

    pycharm:系统找不到指定文件[通俗易懂]解决办法:打开你的项目里面有一个idea文件→找到idea文件下的workspace.xml文件,修改name=”SDK_HOME”,这一行的value→将它的路径修改为Python安装包的路径

    2022年8月27日
    2
  • php微信自动回复机器人,微信自动回复机器人功能怎么实现?[通俗易懂]

    php微信自动回复机器人,微信自动回复机器人功能怎么实现?[通俗易懂]原标题:微信自动回复机器人功能怎么实现?微信自动回复机器人功能怎么实现?最近有不少小伙伴都在询问这个问题。很多人在微信营销的过程中,都会有这样的问题,微信好友太多,想要都在第一时间回复,实在没有精力。下面小编就给大家分享如何使用微信自动回复机器人,大家再也不用担心回复不过来而忙的焦头烂额啦。首先通过米云微信软件,扫码将所以微信号登录,就可以将所有微信号的对话集成,全部聊天里整合了所有微信号的聊天…

    2022年10月1日
    5
  • linux sftp和ftp的区别在哪?

    linux sftp和ftp的区别在哪?sftp和ftp

    2025年8月12日
    3
  • python字典排序方法「建议收藏」

    python字典排序方法「建议收藏」字典是“键-值对”的无序可变序列在实际运用中,对字典进行排序是一个比较常见的操作,主要用到了python内置函数sorted(),该函数可以对所有可迭代的对象进行排序操作。语法(python3):sorted(iterable,key=None,reverse=False)参数说明:iterable:可迭代对象,即可以用for循环进行迭代的对象;key:主要是用来进行比较的元素,只有一个参数,具体的函数参数取自于可迭代对象中,用来指定可迭代对象中的一个元素来进行排序;reverse:排序规

    2022年6月18日
    30

发表回复

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

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