1或0是一位。一个字节是8位。
为什么一个字节可以表示-128到127之间的任何整数,但不包括0到255之间的任何整数?
因为二进制中的11,111,111是255,并且你包含0,那么你可以用一个字节表示256个整数。
另外,我的书auhor告诉我它是256,因为2到8次幂。好吧,这很有道理,但是怎么样?什么是数学?
答案 0 :(得分:3)
因为byte存储有符号值(正负)。如果从-128到+127计数,则为256个值。 Java仅提供有符号的字节值。
此外,它是2 ^ 8,因为一个字节由8位组成。每个位都可以是' 0' 0或者' 1'因此每位有两个可能的值(2 ^ 8)。
1 bit -> 2^1 = 2 values
2 bits -> 2^2 = 4 values
8 bits -> 2^8 = 256 values
n bits -> 2^n.
答案 1 :(得分:3)
每个位可以取两个值,0和1。
由于你有8位,每个都可以取值而不是其他位,8位变量可以取2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 = 2 ** 8 = 256不同值。
由程序员决定这些值是否来自[-128; 127]范围,或从[0; 255]范围(均包含256个不同的值)。我们将前者称为“带符号的8位整数”,将后者称为“无符号8位整数”。
签名值通常使用two's complement表示。
Java byte
是一个8位有符号二进制补码整数的例子
但为什么它是2到8的力量?这是关键问题。而不是添加128,64,32,16,8,4,2,1
您列出的这些数字都是2的幂:128=2**7, 64=2**6, 32=2**5, ..., 1=2**0
。可以很容易地以代数方式显示当你将它们加起来时,得到下一个减去1的幂:128+64+32+16+8+4+2+1=256-1
。
答案 2 :(得分:1)
你可以检查一下'补充和两个补充,以通过此链接https://en.wikipedia.org/wiki/Signed_number_representations
更好地理解答案 3 :(得分:0)
以这种方式思考:每增加一个数字就会使可能的输出数量翻倍。如果您有1位数,则有2个可能的输出。 2位数字为您提供4种可能的输出。 3位数字为您提供8种可能的输出。因此,二进制数有2^n
个可能值(其中n
是位数)。
顺便提一下,这推广到其他类型的基础 - 公式为b^n
(其中b
为基数,n
为数字位数)。因此,例如,3位数的基数为10的数字具有10 ^ 3个可能的值。显然,二元只是基数2;其他流行的基地是8和16,但没有理由我们必须限制它。我们可以做,例如,基地7或基地9或基地13或类似的奇怪的东西,但这很少做。 (选择Base 8是因为它是2的倍数并且均匀地划分为24,这使得它对24位系统很方便;基于类似的原因,base 16对于32位和64位机器来说很方便 - 它比二进制,但它们之间的转换更容易。)
正如其他人所指出的那样, ,实际上是一个字节的256个可能值 - 只是你必须选择是否需要在-128到+127或0范围内的值至255。