如何比较低级的整数和字符串?就像我们每次使用
int a = 11;
int b = 12;
compare(a,b); //Just an example comparison, not in any particular language.
和
String a = "11";
String b = "12";
compare(a,b);
现在我要问的是这两个比较之间的系统级差异是什么?问题不是针对任何特定的语言,而是一个普遍的问题。它也不是关于字符串到整数的转换/比较,反之亦然。我知道对于不同的平台和不同的语言,答案可能会有所不同,但是由于我对此一无所知,我只是在问一个通用的问题。
为何为什么总是将整数比较视为而不是字符串比较?
最佳答案
通常,将字符串或整数(以最简单的形式)逐字节比较。
因此,对于int示例,这将成为单个CPU指令:
cmp a, b
它运行得相当快(假设使用32位整数,32位或更佳的处理器)。这是适合CPU寄存器的单个比较。
但是,字符串更复杂。最简单地说,它看起来像:
foreach ( character c in string a, character d in string b )
cmp c, d
并且必须逐个字符地遍历整个字符串。如果字符串长度不同,则必须处理(显然,int的大小相同)。
在更复杂的级别上,使用语言环境和各种字符集,每个字符串字符可能是2-4个字节,并且尽管具有不同的字节值,但某些字符(带有重音等)可能会彼此相等。涉及更多的处理和处理,更多的工作几乎总是意味着速度变慢。
确切的行为因地区,字符集和语言而异。某些语言(例如C#)存储一定长度的字符串,而另一些语言(C)仅存储字符数组。其他语言可能被设计用于字符串处理,或者具有优化的库来处理它,这可以降低成本。
有趣的是,理论上,当使用ASCII字符串时,比较3个字符或更少字符的字符串可能与比较int大致一样快。在那种情况下,它与所涉及的内存量有关(ASCII的
strcmp
可以在内部使用memcmp
,这大约是==
会使用的内存)。对于将字符串长度存储在开头和0长度(空)字符串的语言,这也可能成立,因为它们可以简单地比较长度(可能是整数)。
关于string - 系统级别的整数和字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6741499/