JAVA byte取值范围表达理解

来源:互联网 发布:人工智能无人驾驶股票 编辑:程序博客网 时间:2024/05/22 00:45

我们知道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


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

数字和对应的二进制
01270000 00000111 1111

128表示-128255表示-11000 00001111 1111
上面的二进制即是大家熟知的补码(补数对应的二进制数即补码)


源码,反码,补码体系


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

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

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

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

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


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

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


原创粉丝点击