题
什么理由对于使用签名的数字作为索引的。净?
在蟒蛇,你可以指数从一系列由发送负数,但是这个不是这种情况。网。这是不容易的。净添加这样的特征后,因为它可能会破坏其他代码也许使用特殊规则(是啊,一个好主意,但是我想这会发生)在编制索引。
不,我曾经拥有所需要的指标阵列中超过2、147、483和647在大小,但是我真的不能理解为什么他们选择签署数字。
它可以是因为它更多的正常使用签字中的数字代码?
编辑:我刚刚发现这些链接:
Edit2:Ok,其他几个良好的原因从螺纹马太福音。贴:
- 历史原因,因为它是一个c类的语言
- 互操作与c
解决方案
为了简化的课程。你喜欢 麻烦的 做小的运算与unsigned int?
其他提示
它可能是长期的传统的使用价值下0作为一个无效的指数。方法一样串。个return-1如果元素未找到。因此,返回值必须签署。如果索引消费者就需要未签署的价值观,必须a)检查和b)投值使用它。与签署的指数,你只需要检查。
无符号不符合CLS。
主要的用处的未签名的数字出现时构成更大的数字来自较小的,反之亦然。例如,如果一个接收的四个符号字节的连接,并希望把他们的价值,作为一个整体,作为一个32位整数,使用未签名类型的装置一个可以简单地说:
value = byte0 | (byte1*256) | (byte2*65536) | (byte3*16777216);
相比之下,如果字签名,表达喜欢上将复杂得多。
我不确定我真的看到有任何理由对一种语言设计现在不包括未签署版本的所有类型短于最长签署整数类型的语义,所有的整数(意的离散数量的数字,而不是任何特定类型)的操作,这将完全在最大签署了类会默认情况下进行 虽然 他们操作这一类型。其中包括一份没有签字的版本,最大的签名类型将复杂的语言规范(由于一个会必须指定哪些行动必须适合范围内的签名类型,其行动必须适合范围内的未签名的类型),但在其他方面应该没有问题设计的语言,所以, if (unsigned1 - unsigned2 > unsigned3)
会产生一个"数正确"的结果,甚至时 unsigned2
大于 unsigned1
[如果一个人未签名的包裹式,人们会明确指定 if ((Uint32)(unsigned1 - unsigned2) > unsigned3)
].语言,其中指定这种行为无疑将是一个巨大的进步的混乱存在C(合理的,鉴于其历史),C#或vb.net.