string - 系统级别的整数和字符串比较

标签 string comparison integer

如何比较低级的整数和字符串?就像我们每次使用

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/

相关文章:

java - 有什么方法可以在忽略字母大小写的 java 中应用正则表达式?

python - 为什么 Decimal ('0' ) > 9999.0 在 Python 中为真?

java - 最快的数组比较

java - 将字节数组转换为相应整数的快速方法

c - 什么是一组整数集的简单 C 库?

java - Integer.valueOf 不适用于 Java 中 -1 的二进制表示

c++ - 输出句子中单词的第一个字母

c - 在c中使用字符串-扩展,替换,存储和打印字符串

搜索未排序的数组

java - 打印字符数组的输出是什么意思?