计算机中的二进制

在复习Java基本类型的时候突然遇到的问题
为什么byte型的数据表示的范围是 -128~127呢?我们都知道byte在Java中占一个字节,一个字节也就是八位,简单来说就是八个二进制(电脑只认识0,1 最终都是转化成二进制来识别的)在Java中最高位是用来表示正负数的,0代表正数,1代表负数。byte型的占八位数,有一位是符号位也就是说用来表示实际数大小的也就是7位,那么为什么不是
11111111 ~ 01111111 也就是(-127 ~ 127)呢?
其实在Java中负数不是这么表示的,并不是-127就是127化成二进制然后在前面加一个1表示负数。Java中表示负数是这样的,比如-127,他的负数的二进制的表示方法是 -127的绝对值 127,取127的二进制 01111111,然后取反得到 10000000,然后再加一得到 10000001,这才是-127的二进制表示方法。那么-128怎么来的呢,其实-128就是 10000000,这就是8位数的最小负数的,可以看出在二进制负数中第一位始终是1,然后面的数越大表示这个数越大,后面的数越小表示这个数越小
比如 11111111 表示的是-1,这就是负数中最大的数了,10000000表示-128,这个数最小,-127就是10000001 ,拿出第一位符号位,后面的数比较大小就可以比较出这两个数的大小
那么-129呢,按照负数二进制的方法,应该是129的二进制,10000001,然后取反01111110,然后加一,01111111,可以看到得到的结果最高位是0,0应该表示正数,当遇到这种情况就说明位数不够用了,它是负数应该主动在前面加1,也就是101111111,这个时候就是9位数了,就超出byte的范围了。128也一样,128二进可以制是 10000000, 看到最高一位是1,应该表示负数,可是128是正数,这个时候就要在前面加0,010000000表示128。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值