java的byte数据类型总结||二进制的原码、反码和补码

本文介绍了Java中byte数据类型及其与二进制原码、反码和补码的关系。详细阐述了正数和负数在计算机中的二进制表示,并解释了byte取值范围从-128到127的原因。同时,讨论了byte与ASCII码的联系,以及在转换和运算过程中的注意事项,如byte与int类型转换时的位运算技巧。

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

目录

二进制的原码、反码和补码

正数

负数

byte

byte的取值范围为什么是-128~127

byte与ASCII

byte&0xff的作用

int强转换为byte


二进制的原码、反码和补码

原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

正数

首位表示符号位,原码、反码和补码都是本身。

负数

如何计算负数在计算机中的二进制(即它的补码)?

首先对负数的绝对值取反,然后+1得到负数的补码。

 

例如:byte a=-5

-5的绝对值=5   5的二进制表示是  0000 0101     取反得到 1111 1010    +1运算得到 1111 1011  ,那么1111 1011就是-5的补码。

 

也可以这样,用原码计算

例如:byte a=-5  原码表示       1000  0101 

计算其反码为  1111 1010

计算其补码为  1111 1011

所以 -5在计算机中表示为1111 1011

 

byte

byte的取值范围为什么是-128~127

 

byte 表示一个字节,8bit,其中最高位是符号位。因此,最大值为 0111 1111,即127;最小值是负数为 1000 0000(规定)【其他数据类型的最大最小值也可以这样以此类推】。在计算机中二进制都是以补码的形式表示的,我们也可以这样来理解,为什么最小是-128

 

最小负数补码表示为:1000 0000

由补码计算原码:

 

1000 0000 作-1 运算 得到 0111 1111,取反  1000 0000  因为负数的补码是其绝对值取反,即10000000为最小负数的绝对值,而10000000的十进制表示是128,所以最小负数是-128

 

byte与ASCII

 

标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。

 

ASCII码表示的范围是0~127  刚好byte类型可以覆盖到。因此byte类型和ASCII可以互相转换。可以根据ASCII对照表进行查看http://tool.oschina.net/commons?type=4

 

当byte类型的变量的值实时是在''单引号里面的时候,该byte变量的值表示的是ASCII码,可以通过ASCII对照表查看其真实的数值。

比如:

public class ByteTest {
    public static void main(String args[]) {
        byte a = 'a';
        byte b = 'B';
        byte c = '4';

        System.out.println("a=" + a);
        System.out.println("b=" + b);
        System.out.println("c=" + c);
    }
}

输出:

a=97
b=66
c=52

byte&0xff的作用

byte->int   因为byte是8位,而int是32位,当byte类型转换为int类型的时候,会自动用符号位补足高位。例如 -5  1111 1011 转为int 类型会表示为 1111 1111 1111 1111 1111 1111 1111 1011  其表示的十进制的数值不变。

 

有的时候,我们只想保留二进制的补码形式,我们可以用byte&0xff。0xff是十六进制,默认是int类型,其二进制表示为 0000 0000 0000 0000 0000 0000 1111 1111    将byte类型的数值跟0xff作&操作,可以将高24位变为0,保留低8位。当然对应的十进制数也发生了变化。(相当于将byte变成无符号int类型)

例如:byte a=-5     ((int)-5)&0xff

  1111 1111 1111 1111 1111 1111 1111 1011

&

   0000 0000 0000 0000 0000 0000 1111 1111

= 0000 0000 0000 0000 0000 0000 1111 1011

 

int强转换为byte

例如:int a=234    byte b=(byte)a -->得到b=-22  因为234已经超出了byte类型的表示范围,强转会直接丢弃高位,保留低8位。

int类型的234的二进制表示为:1110 1010【高24位全是0】 强转为byte类型,舍弃高24位得到1110 1010 ,第一位为符号位1,得到一个负数-22。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值