计算机中原码、反码、补码的理解

本文详细介绍了计算机中二进制的几种编码方式:原码、反码和补码,并通过实例解释了这些编码如何应用于表示有符号数和无符号数。此外还分析了Java中byte类型的取值范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算机内部所有的数据都是以二进制的形式存储,二进制又有多种编码:原码、反码、补码等。而在计算机中无符号数(unsigned numbers)使用原码表示,有符号数(signed numbers)使用补码表示。

首先在计算机中二进制中最高位是存放符号位的,正数为0,负数为1

以1个字节表示,1字节等于8位

例如:

+1  = 0000 0001

-1  =  1000 0001

原码

原码就是第一位表示符号位,其余表示值,例如一个8位二进制:

[+1]原 = 0000 0001

[-1]原 = 1000 0001

因为第一位表示符号位,因此取值范围:[-127 , 127]

反码

反码的表示方法:正数的反码是其本身,负数的反码就是在原码的基础上,符号位不变,其余各位取反。

[+1] = [0000 0001]原 = [0000 0001]反

[- 1] = [1000 0001]原 = [1111 1110]反

补码

补码的表示方法:正数的补码是其本省,负数的补码在其反码符号位不变的基础上 加 1

[+1] = [0000 0001]原 = [0000 0001]补

[- 1] = [0000 0001]原 = [1111 1111]补

由补码来理解byte的的最大值与最小值

在java中byte 最大值:127  最小值:-128

byte的二进制中最大为0111 1111  最小值1000 0000 ,注意最高位为负号位

正数的原码就是0111 1111,补码也是0111 1111 因此最大值127

负数的原码是1000 0000,其补码除了符号位,其它值都取反,在+1;因此取反后为1111 1111,在+1,把负号位拿出,此时为1 1000 0000,而1000 0000的十进制是128,由于其符号位为负数因此为-128

参考文章:

计算机原码、反码、补码详解_-128的原码反码补码-优快云博客

byte类型取值范围以及溢出详解_public class bytetest { public static void main(st-优快云博客

https://www.cnblogs.com/hanhuo/p/6341111.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值