怎样求16个二进制位可以储存的最大数是多少

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样求16个二进制位可以储存的最大数是多少相关的知识,希望对你有一定的参考价值。

16位二进制数最大可以表示65535。解决方法如下:

1、通过 Integer.toBinaryString 将一个数字转为二进制串,补齐前面缺失的0,通过 StringBuilder 的 reverse 方法将串颠倒反转,并通过 Integer.parseInt 方法将颠倒的串转为整型数值(二进制转换)。

2、因为 Integer.parseInt 方法只能转变正数的二进制串,对于负数的二进制串(1开头)会抛出异常,图示异常信息。

3、因为参数是32位整型数字,所以固定循环32次,先将结果数字向左移动1位,然后通过和1相与获取当前参数最后1位,并和结果数字异或运算,最后将参数数字向右移动1位。

4、主方法中指定一个数字,并调用二进制法进行二进制位反转,返回反转后的数字,并打印到控制台。

5、运行主方法,测试二进制移位法,图示,观察控制台输出结果。

参考技术A 16位二进制数最大可以表示65535。所以16位二进制的最大表示法是1111111111111111
二进制换算成10进制计算方法:
从最低位(最右)算起,位上的数字乘以本位的权重,权重就是2的第几位的位数减一次方。比如第2位就是2的(2-1次)方,就是2;第4位就是2的(4-1)次方是8。然后把所有的值加起来。
所以换算成10进制就是
1*2^15+1*2^14+1*2^13+1*2^12+1*2^11+1*2^10+1*2^9+1*2^8+1*2^7+1*2^6+1*2^5+1*2^4+1*2^3+1*2^2+1*2^1+1*2^0=65535
参考技术B 16个二进制能够存储的最大数,若第一位表示符号位
那最大的情况就是
0111 1111 1111 1111
若没有符号位
那就是
1111 1111 1111 1111.
一个二进制位最大是1,求最大数,就将每为都设置为1就可以了。追问

答案是99,可是我不知道怎么来的,请你跟我解释下好吗?谢谢。

追答

怎么会是这个数啊
1111 1111 1111 1111.
是65535
0111 1111 1111 1111
是32767

怎么算也不会是99 啊。

追问

对啊,我也算出来是65535,可是书上的答案却是99

追答

如果描述没有错,那答案肯定不对。

参考技术C 这句话前文的意思是采用ASCII编码符号来存储,其中数字0-9都有对应的ASCII码,每个符号一个字节,16个二进制位有两个字节,分别用来表示数字9,即最大为99。联系上下文,不要理解成二进制计数法!!! 参考技术D pow(16,2);

n 位可以表示多少个值?

【中文标题】n 位可以表示多少个值?【英文标题】:How many values can be represented with n bits? 【发布时间】:2011-04-18 01:35:32 【问题描述】:

比如n=9,那么9个二进制数字(位)可以表示多少个不同的值?

我的想法是,如果我将这 9 位中的每一个都设置为 1,那么我将使这 9 位能够表示的最大数字成为可能。因此,最大值是1 1111 1111,它等于十进制的511。因此,我得出结论,9位二进制可以代表511个不同的值。

我的思维过程正确吗?如果没有,有人可以解释一下我错过了什么吗?如何将其推广到n bits?

【问题讨论】:

512。你忘记了 000000000。 +1 提出了一个很好的家庭作业问题。如果 Stack Overflow 上的所有作业问题都是这样,那将是一个更好的地方。 为什么关闭:(它与“特定时间”无关..... 例如2 pow 3 代表三个占位符(例如 000、001、010、100、101、110、111)的两种组合 (0,1)。如果您有五个位置的 8(八进制 0-7)组合,则可能的组合总数为8 战俘 5. 【参考方案1】:

29 = 512 个值,因为这是您可以拥有的 0 和 1 组合的数量。


然而,这些值代表什么取决于您使用的系统。如果它是一个无符号整数,您将拥有:

000000000 = 0 (min)
000000001 = 1
...
111111110 = 510
111111111 = 511 (max)

在two's complement(通常用于表示二进制整数)中,您将拥有:

000000000 = 0
000000001 = 1
...
011111110 = 254
011111111 = 255 (max)
100000000 = -256 (min) <- yay integer overflow
100000001 = -255
...
111111110 = -2
111111111 = -1

通常,使用 k 位可以表示 2k 个值。它们的范围取决于您使用的系统:

无符号:0 到 2k-1 签名:-2k-1 到 2k-1-1

【讨论】:

你提出了一个非常有趣的观点。我没有想到有符号和无符号整数。 但在任何情况下,不同值的数量始终是 2^k【参考方案2】:

你缺少什么:零是一个值

【讨论】:

【参考方案3】:

解决问题的更好方法是从小处着手。

让我们从 1 位开始。可以是10。这是 2 个值,或二进制的 10

现在是 2 位,可以是 00011011,这是 4 个值,或者是二进制的 100... 看到模式了吗?

【讨论】:

【参考方案4】:

好的,既然它已经“泄露”了:你漏掉了零,所以正确答案是512(511 是最大的,但它是 0 到 511,而不是 1 到 511)。

顺便说一句,一个很好的后续练习是概括这一点:

How many different values can be represented in n binary digits (bits)?

【讨论】:

感谢您解释我错过了 0 值。您改写问题的方式肯定会在将来对我有所帮助。【参考方案5】:

这里不想给你答案就是逻辑。

每个数字都有 2 个可能的值。你有 9 个。

就像在以 10 为基数的情况下,你有 10 个不同的数字值说你有 2 个(从 0 到 99):0 到 99 有 100 个数字。如果你做计算,你有一个指数函数

base^numberOfDigits:
10^2 = 100 ;
2^9 = 512

【讨论】:

【参考方案6】:

有一种更简单的方法来考虑这个问题。从 1 位开始。这显然可以表示 2 个值(0 或 1)。当我们添加一点时会发生什么?我们现在可以表示两倍的值:我们之前可以表示的值附加了 0,而我们之前可以表示的值附加了 1。

所以我们可以用 n 位表示的值的数量只是 2^n(2 的 n 次方)

【讨论】:

【参考方案7】:

您缺少的是正在使用的编码方案。有不同的方法来编码二进制数。查看带符号的数字表示。对于 9 位,可以表示的数字的范围和数量会因使用的系统而异。

【讨论】:

表示的数字范围会因编码而异,但无论使用何种编码,可表示的不同值的数量都保持不变 我刚刚在纸上计算出 3 位固定精度来检查自己。无符号和 2 的补码表示可以表示 8 个值。我计算有符号幅度和 1 的补码的 7 个值,因为这些系统具有正零和负零的表示。正负零也算吗? 对于 1 的恭维,正零和负零被视为两个不同的值。我不确定你所说的“有符号幅度”是什么意思,你能详细说明你的意思吗? @Lie:有人可能会说+0-0 是两个不同的基准,它们代表相同的。使用该术语,k 位序列中的数据数量始终为 2^k,但这些数据可能表示的值的数量小于或等于 2^k。 @Lie Ryan:en.wikipedia.org/wiki/… 我不知道(或忘记...)+0 和 -0 都被计算在内。以后我会记住的。谢谢。

以上是关于怎样求16个二进制位可以储存的最大数是多少的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL2007中最多可以转10位二进制的数,我想把40位的二进制转成十进制的数,有啥办法?

1个字节等于多少个16进制

两位十六进制数由多少字节组成

uint16范围是多少

一个字节的十六进制数最大值相当于多大的十进制数,两个字节的十六进制数最大值相当于多大的十进制数

一个字节等于多少二进制数?