java - Java中的ascii字符表示?

标签 java

如果我使用单个 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/

相关文章:

Java - 内联表达式的资源释放

java - 当我使用 jQuery EasyUI 时,如何在跨度中写入数据

java - 累积位运算

java - 将 GUI 添加到我的应用程序

java - 无法在 docker 容器之间通信 - 连接被拒绝

java - Java 中标签和单选组之间不需要的线

java - Jackson 将属性序列化并包装到一个新对象中

java - HashSet Eclipse 调试器变量

java - 无法在 ADT 中安装 wtp 组件

java - 漫反射着色和环境着色