如果我使用一个int来表示一个ascii字符集,如何使用它来减少8倍的存储空间?与256个布尔值的数组相比?单个int的功能也类似于位向量。
java中的布尔值将占用1位,因为它只能表示true或false值。例如,如果我有一个布尔值数组。boolean[]char_set=new boolean[256]这将占用256位,正确吗?我读到,如果我使用一个int像一个位向量,这意味着我可以用32位覆盖256个值。我想这是8倍的减少。但是为什么下面的代码能起作用呢?
int checker = 0;
for(int i=0;i<str.length();i++)
{
int val = str.charAt(i) - 'a';
if(checker& (1<<val)) > 0)
{
return false;
}
checker |= (1<<val);
}
return true;
}
有人能特别解释一下位向量逻辑在这种情况下是如何工作的吗?他们假设字符串包含小写字符。
int
是32位,而不是256位。光是它还不足以代表一组256个可能的项目。你需要8个。我不知道你说你可以只用32位是什么意思。
不清楚您在循环什么--什么是str
?从0到255的所有256个值?我很怀疑,因为您在减去'a'
。你的值宇宙只有32个可能的字符吗?那么你肯定可以用32位。但是256是从哪里来的呢?
掩码条件需要为!=0
才能适用于最高位集。
(Boolean
的“实际”大小对Java程序员来说是不透明的。实际上,您会发现它不是1位(机器不能按位寻址),甚至也不是1字节。Java实际上使用了整整32位的单词。但这与您的问题并不相关。)
问题内容: 我有一个包含非ASCII字符的URI,例如: http://www.abc.de/qq/qq.ww?MIval=typo3_bsl_int_Smtliste&p_smtbez=Schmalbl -ttrigeSomerzischeruchtanb 如何从此URI中删除“ …” 问题答案: 我猜想URL的来源更多是错误的。也许您正在解决错误的问题?从URI中删除“奇怪”字符可能会赋予它完
问题内容: 我在Matplotlib中显示非ASCII字符时遇到问题,这些字符呈现为小框而不是适当的字体,看起来像(我用红色油漆填充了这些框以突出显示它们): 我如何解决它? 一个相关的问题是 Matplotlib中的重音字符 。 问题答案: 实际上,此问题可能有两个不同的原因: 默认字体不包含这些字形 您可以使用以下方法更改默认字体(在完成任何绘制之前!) 在某些版本的matplotlib中,您
问题内容: 什么正则表达式将匹配Java中的任何ASCII字符? 我已经尝试过: 但是发现它与我想要的很多东西都不匹配(例如空格,括号等)。我希望避免以如下格式显式列出所有127个ASCII字符: 问题答案: 我没用过但是我用过
问题内容: 我正在尝试解析包含某些非ASCII字符的xml, 代码如下 但它在行“ content = …”上显示了错误,例如 在终端中它正在工作,但是在Eclipse IDE上运行时却给我一个错误。 不知道该如何克服。 问题答案: 您应该定义源代码编码,并将其添加到脚本顶部: 它在控制台和IDE中工作不同的原因可能是由于设置了不同的默认编码。您可以通过运行以下命令进行检查:
问题内容: 如果我有一个PHP字符串,如何有效地确定它是否至少包含一个非ASCII字符?所谓非ASCII字符,是指不属于此表的任何字符,http://www.asciitable.com/,其位置为32-126(含)。 因此,它不仅必须是ASCII表的一部分,而且还必须是可打印的。我想检测一个包含至少一个不符合这些规范的字符的字符串(不可打印的ASCII字符或完全不同的字符,例如不属于该表的Uni
问题内容: 从网站提取数据时出现奇怪的字符: 如何删除不是非扩展ASCII字符的内容? 问题答案: 正则表达式替换将是最佳选择。使用作为一个例子的字符串,并使用匹配它,这是一个POSIX字符类: 什么是寻找所有可打印字符。相反,查找所有不可打印的字符。不属于当前字符集的所有字符都将被删除。 注意: 使用此方法之前,必须确保当前字符集为ASCII。POSIX字符类同时支持ASCII和Unicode,