二进制补码-反码-原码「建议收藏」

二进制补码-反码-原码「建议收藏」最近学习java基础语法的时候,对其基本数据结构中的二进制位数与十进制大小间的转换产生了疑惑,想起学习IP地址的时候也貌似产生了相同的困惑,所以干脆总结一下,权当学习及备忘了。在计算机内,定点数有

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

最近学习java基础语法的时候,对其基本数据结构中的二进制位数与十进制大小间的转换产生了疑惑,想起学习IP地址的时候也貌似产生了相同的困惑,

所以干脆总结一下,权当学习及备忘了。

在计算机内,定点数有3种表示法:原码反码补码
原码:就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码:表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码:表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

首先需要明确是java中是用补码表示二进制数,补码的最高位是符号位,最高位为“0”表示正数,最高位为“1”表示负数。
正数补码为其本身;
负数补码为其绝对值各位取反加1;(这里还记得“若干年”前C语言老师说的一句“各位取反,末位加一”。。。)

例如:
+21,其二进制表示形式是00010101,则其补码同样为00010101
-21,按照概念其绝对值为00010101,各位取反为11101010,再加1为11101011,即-21的二进制表示形式为11101011

步骤:
1、byte为一字节8位,最高位是符号位,即最大值是01111111,因正数的补码是其本身,即此正数为01111111
可以借助等比数列的求和公式,得到其十进制表示形式为(2^7-1)即127
2、最大正数是01111111,那么最小负是10000000(最大的负数是11111111,即-1)

需要强调的是,由于正数的原码、补码都一样,求其十进制大小的时候无需转换(所以也容易产生混淆),

而负数则不同。此处的最大正数01111111和最小负数10000000都是补码形式(java的语言规定。。)

3、10000000是最小负数的补码表示形式,我们把补码计算步骤倒过来就即可。10000000减1得01111111然后取反10000000
因为负数的补码是其绝对值取反,即10000000为最小负数的绝对值,而10000000的十进制表示是128,所以最小负数是-128
4、由此可以得出byte的取值范围是-128到+127

对于负数而言,需要掌握两种情况:知道其大小(十进制值),求补码;知道其补码,求其大小。

一个十进制负数转换成其二进制补码表示的时候,步骤为:

  负数—>正数(取绝对值)—->二进制补码—(末位减一,各位取反)>二进制原码

  -128          128                        1000 0000                 0111 1111               1000 0000

 

二进制补码-反码-原码「建议收藏」

 

二进制补码-反码-原码「建议收藏」

 

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

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

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


相关推荐

  • 揭秘vista引导机制

    揭秘vista引导机制揭秘vista引导机制   所谓的引导机制就是在操作系统内核运行前的一小段程序。其主要作用是初始化电脑硬件设备,建立内存空间的映射图。从而将系统的软件和硬件设备环境调配到一个适合的状态,以使电脑最终调用系统内核而准备好适合的环境。   那么vista的引导机制是否和以前的windows的版本不同呢?其实vista引导机制是一项全新的技术。以前寄予nt的windows系统采用“ntl

    2022年10月10日
    2
  • ODT入门_odt是什么

    ODT入门_odt是什么操作关键:推平一段区间cf896c题意:操作分四种,区间加上一个数、区间赋值、求区间第k小、求区间幂次和将序列中连续的相同的元素整合、用一个三元组(L,R,val)来表示set维护定义内部类:structnode{intl,r;//区间的左端点、右端点mutableLLv;//数值node(intL,intR=-1,LLV=…

    2025年10月12日
    7
  • DATETIME 和 SMALLDATETIME 的内部存储

    DATETIME 和 SMALLDATETIME 的内部存储—-DATETIME和SMALLDATETIME的内部存储与我们输入的或者显示的是完全不一样的。具体的不多说了—-看下面的演示 –1.datetime的内部存储 declare@dtdatetimeset@dt=current_timestamp  —datetime在数据库中是以8字节存储的前4个存储的是以1900-01-01为基准算出

    2022年5月19日
    25
  • 简述SQL2008部署多实例集群(学习)

    简述SQL2008部署多实例集群(学习)

    2021年11月26日
    72
  • google搜索引擎怎么用_如何使用谷歌搜索

    google搜索引擎怎么用_如何使用谷歌搜索2021年2月23日,在使用python的matplotlib模块画图的过程中,marker的点过于密集了,在国内的搜索引擎(你懂的)搜索了好长时间,也不知道是我的搜索关键字设置的不对,还是它就是这么垃圾,一直搜索不出来我需要的答案。无奈之下,只好试试google。在google里面使用中文搜索也是搜索不到答案,我使用英文关键字搜索,第一条搜索出来的便是StackOverflow的答案,立马解决了我的问题。这令我感触颇深,google搜索引擎确实是程序员的利器。所以一定必须用好google搜索。

    2025年10月24日
    4
  • pycharm如何调用anaconda环境_pycharm怎么使用anaconda环境

    pycharm如何调用anaconda环境_pycharm怎么使用anaconda环境pycharm中添加anaconda环境无效本文是经过作者多次尝试最终解决掉的。1、先说说我自己在安装anaconda之前的环境配置:我的电脑本地上安装了python3.7.4和pycharm,平常学习都能正常使用pycharm。后来因为要做深度学习,不得不安装anaconda。2、我就想着直接在原来的基础上安装anaconda算了,到时候在pycharm中新增一个CondaEnviron…

    2022年8月26日
    11

发表回复

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

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