如果我使用单个 int 来表示 ascii 字符集,如何使用它来将存储空间减少 8 倍?与 256 个 boolean 值的数组相比?单个 int 的功能也类似于位 vector 。
java 中的 boolean 值将占用 1 位,因为它只能表示 true 或 false 值。例如,如果我有一个 boolean 值数组。 boolean[] char_set = new boolean[256] 这将占用 256 位,正确吗?我读到如果我使用像位 vector 这样的单个 int,这意味着我可以使用 32 位来覆盖 256 个值。我猜这会减少 8 倍。但是为什么下面的代码可以工作呢?
它正在检查字符串中是否有重复项。他们假设使用 ascii 字符集。 Str 是一些字符串。
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;
}
有人可以具体解释一下位 vector 逻辑在这种情况下是如何工作的吗?他们假设字符串包含小写字符。
最佳答案
int
是 32 位,而不是 256 位。仅靠它还不足以表示 256 个可能项目的集合。你需要 8 个。我不确定你的意思是你只能使用 32 位。
不清楚您要循环的内容 - 什么是 str
?从 0 到 255 的所有 256 个值?我很怀疑,因为你正在减去 'a'
。您的值域只有 32 个可能的字符吗?然后确保你可以使用32位。但 256 是从哪里来的呢?
您的掩码条件需要为 != 0
才能适用于最高位集。
(boolean
的“真实”大小对于 Java 程序员来说是不透明的。实际上,您会发现它不是 1 位(机器无法按位寻址) ,甚至不是 1 个字节。Java 实际上使用了整个 32 位字。但这与你的问题并没有真正的关系。)
关于java - Java中的ascii字符表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12440147/