第一百三十六章 真正深入了解NBT-2
在上一章的时候,我们知道了NBT一共有14种数据类型:
[字符]
字符串(String)
[数值]
{整形}
字节型(Byte:B)
短整型(Short:S)
整型(Int:I)
长整型(Long:L)
{浮点型(小数)}
单精度浮点型(Float:F)
双精度浮点型(Double:D)
[数据]
复合标签(Combr /ound)
列表(List)
[数组]
字节型数组(Byte Array:[B])
整型数组(Int Array:[I])
长整型数组(Long Array:[L])
现在我们已经深入了解了字符串(String)、字节型(Byte:B)和短整型(Short:S)。在上一章的末尾,我提到了1.13版本及以后,Mojang把附魔等级(lvl)的数据类型从Short短整形改成了Int整形。那么问题来了,什么是Int整形呢?
Int整形是Minecraft中很常见到(注意这里)的数据类型,根本原因就在于它无特定格式,也就是不需要填写类型字母,直接上数字就完事了。那么到底有多常见呢?如物品的耐久和损害值,类型就是Int整形。红石比较器比较命令方块输出的模拟信号强度值类型,也是Int整形(这就是为什么红石信号强度能超过15的原因)。其他的如效果持续时长、MC地图边长、红石比较器输出的信号强度等也是Int整形。
没错,MC地图只要你电脑够好,在没有边界拦你的前提下,地图理论上最大可达到2147483647×2147483647=4.611686014132420609×10^18即4611686014132420609(四百六十一京一千六百八十六兆零一百四十一亿三千二百四十二万零六百零九)个方块。
“MC牛逼!”(破音)
上面这几个例子都是MC原版的。在mod里,比如IC2的能量等级也是Int整形。
估计你也发现了,上面说过MC地图边长是Int整形,而MC地图的极限又是2147483647×2147483647,所以——Int整形的上限是2147483647。
而我相信你在了解完字节型和短整形的值范围后,已经得出了一个数值范围的公式:
-(n+1)~n(n为该值类型的上限,且n≠0)或
-(2ⁿ⁻¹)~2ⁿ⁻¹-1(n为该值类型的2进制位数)
把Int整形值上限2147483647套进去,你就可以得到Int整形的数值范围了:
-21,4748,3648~21,4748,3647「-(2³¹)~2³¹-1」(4字节)
实际上Int整形的内容也就只有这个数值范围,可以说是最简单的了。
总的来说,Int整形的特性就是:
1.数值范围为-21,4748,3648~21,4748,3647「-(2³¹)~2³¹-1」(整数)
2.占用空间4字节
真的是灰常简单呢!
三个整形都完了,就剩下最后一个了:
长整型(Long:L)
Long长整型,顾名思义,就是一串很长很长很长的整数,实际上也确实如此。它的类型字母为L(注意是大写),当然用“l”(L的小写,不是i的大写)也是可以的。
那么Long长整形到底有多长呢?我们知道,最短的字节型占用1字节,然后是占用2字节的短整形,接着是4字节的整形,可以发现占用字节数是翻着倍上去的,所以我们的Long长整形其占用空间达到了8字节!即64位。而64位的二进制最大值是:
10000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000
我们可以将其转化为10进制:
1×2⁶³+0×2⁶²+0×2⁶¹+.......+0×2¹+0×2⁰
=2⁶³+0+0+0+0+0+......+0+0
=2⁶³
既然8字节空间可存储的最大值为2⁶³,那么我们的Long长整形其值范围就是:
-(2⁶³)~2⁶³-1
或许这样子用次方表达表达不出来Long长整形有多长,那么接下来,我们就要把这个次方化为一个正常的数字,坐稳了!
所以我们的Long长整形其范围就是:
-922,3372,0368,5477,5808~922,3372,0368,5477,5807
(负九百二十二京三千三百七十二兆零三百六十八亿五千四百七十七万五千八百零八至九百二十二京三千三百七十二兆零三百六十八亿五千四百七十七万五千八百零七)
真够长的,都是2147483648的平方(4611686014132420609)的两倍。
这下子懂了吧。现在我们举个例子。
举什么例子好呢?好像因为这家伙太长导致很少用到哎!这可咋办?
没错!实际上,Long长整形在Minecraft并不常用,你很难找到一个值为Long长整形的标签。你与Long长整形最近的一次接触,估计就只有世界的种子了吧(MC种子的值是Long长整形,你填的字母或其他的特殊符号都会在世界生成时转化为数字)。
那么这样子吧。假设有这么一个标签:The_death_of_Gu_Zhenxing,作用就是存储着古振兴死的次数,其值为Long长整形。假设古振兴已经死了8,388,608(2²³)次,那么其值就是:
{The_death_of_Gu_Zhenxing:8388608L}
懂了吧?
所以,Long长整形的特性就是:
1.值范围是-922,3372,0368,5477,5808~922,3372,0368,5477,5807「-(2⁶³)~2⁶³-1」(整数)
2.占用空间8字节
3.类型字母为L和l(L的小写)
嗯,这就是整形的四个类型。由于作者时间的关系,这一章就到这了。下一章我们将会继续了解浮点数以及更多的东西。