JAVA byte取值范围表达理解

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:29   2250   0

我们知道JAVA中byte是一个字节来进行存储的,即8位二进制数,可以表示的数字有256即(0-255)

但计算机中需要表示正数和负数,那么负数在计算机中怎么表示呢?

这里涉及一个新的概念就是

模:

模 即n位m进制能表示的数字的个数,那么8位二进制数的模就是256

如果是两位10进制数呢,那就可以表示 0-99 这100个数,即模是100

补数:

范围在 1->模 之间的任意两个相加等于模的数互为补数

先贤们就用一个很巧妙的方式来表达了负数:即在(0-模)范围内一半的数字表示正数,一半的数字表示负数

0-127(十进制) 这128个数字表示byte中的 0-127

128-225(十进制)这128个数字表示byte中-128 到 -1

在计算机中存储的二进制表示如下:

数字和对应的二进制

0127
0000 00000111 1111


128表示-128255表示-1
1000 00001111 1111


上面的二进制即是大家熟知的补码(补数对应的二进制数即补码)

源码,反码,补码体系

正数补码是其二进制数本身

负数的补码是首先获得其绝对值原码,再首位变1后其余取反再加1;

[+1] = [00000001] = [00000001] = [00000001]

[-1] = [10000001] = [11111110] = [11111111]

可以参看:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

这和用模的概念获得数字在计算机中存储的二进制结果是一致的,

可以说后者(原码,反码,补码)是一种途径,而前者(一半用来表示正数,一半用来表示负数)是约定;

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP