Java中的ascii字符表示法?

Java中的ascii字符表示法?,java,Java,如果我使用单个int来表示ascii字符集,那么如何使用它将存储空间减少8倍?与256个布尔值的数组相比?单个int的功能也类似于位向量 java中的布尔值将占用1位,因为它只能表示真值或假值。例如,如果我有一个布尔值数组。布尔[]字符集=新布尔[256]这将占用256位,对吗?我读到,如果我使用一个int,比如位向量,这意味着我可以使用32位来覆盖256个值。我想这是减少了8倍。但是为什么下面的代码可以工作呢 它正在检查字符串中是否有任何重复项。他们假设一个ascii字符集。Str是一些字符串

如果我使用单个int来表示ascii字符集,那么如何使用它将存储空间减少8倍?与256个布尔值的数组相比?单个int的功能也类似于位向量

java中的布尔值将占用1位,因为它只能表示真值或假值。例如,如果我有一个布尔值数组。布尔[]字符集=新布尔[256]这将占用256位,对吗?我读到,如果我使用一个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;
}
int checker=0;

对于(int i=0;i一个
int
是32位,而不是256位。仅此一项不足以表示一组256个可能的项目。您需要其中的8个。我不确定您的意思是,您可以只使用32位

不清楚你在循环什么-
str
?从0到255的所有256个值?我很怀疑,因为你在减去
'a'
。你的值范围只有32个可能的字符吗?那么你肯定可以使用32位。但是256从哪里来的呢

您的掩码条件必须是
!=0
,才能适用于最高位集


(对于Java程序员来说,
boolean
的“real”大小是不透明的。实际上,您会发现它不是1位(机器不可位寻址),甚至不是1字节。Java实际上使用了整个32位字。但这与您的问题并不相关。)一个
int
是32位,而不是256位。仅仅它不足以表示一组256个可能的项目。您需要其中的8个。我不确定您的意思是,您可以只使用32位

不清楚你在循环什么-
str
?从0到255的所有256个值?我很怀疑,因为你在减去
'a'
。你的值范围只有32个可能的字符吗?那么你肯定可以使用32位。但是256从哪里来的呢

您的掩码条件必须是
!=0
,才能适用于最高位集


(对于Java程序员来说,
boolean
的“真实”大小是不透明的。实际上,你会发现它不是1位(机器不能位寻址),甚至不是1字节。Java实际上使用了一个完整的32位字。但这与你的问题并没有真正的关系。)

这段代码所做的只是“标记”表示字符存在的位。

在您的例子中:
int val=str.charAt(i)-'a';
。如果当前字符是
a
,那么
val
等于
0
,因此这行
检查程序&(1代码段所做的只是“标记”一位以表示字符的存在。
在您的情况下:
int val=str.charAt(i)-“a”
。如果当前字符是
a
,则
val
等于
0
,因此此行
检查符&(1)
java中的布尔值将占用1位,因为它只能表示真值或假值。因此,例如,如果我有一个布尔值数组。boolean[]char\u set=new boolean[256]这将占用256位正确吗

这是不正确的。现代计算机无法寻址一个位

此外,为了表示ASCII字符,您只需要8位,因为
2^8=256
(其中
^
表示求幂)

java中的布尔值将占用1位,因为它只能表示真值或假值。因此,例如,如果我有一个布尔值数组。boolean[]char\u set=new boolean[256]这将占用256位正确吗

这是不正确的。现代计算机无法寻址一个位


此外,为了表示ASCII字符,您只需要8位,因为
2^8=256
(其中
^
表示幂运算).

再详细解释一下这个问题!你问的问题还不太清楚!一个建议是使用unicode来存储字符串和字符数据。Ascii非常过时,使代码和程序的可移植性降低。你说的“表示字符集”是什么意思?再详细解释一下这个问题!你问的不是很清楚!一个建议是使用unicode来存储字符串和字符数据。Ascii非常过时,会降低代码和程序的可移植性。你说的“表示字符集”是什么意思?您可以用int表示2^32个可能的值。str是一个字符串,它只能包含ascii字符集的值。当然。但您似乎将其用作位集,以指示存在/不存在任何东西。这样的集确实有2^32个可能的状态,但是,它可以在集中表示的对象的范围有32个元素。您的代码不起作用,因为移位可以大于32,它只是从int的顶部溢出。您的掩码在这种情况下不设置任何内容。您可以举出一个溢出的示例。这样更容易理解,如果字符串包含ASCII值小于“A”的“A”,会发生什么?移位将为负数,并抛出一个except从技术上讲,ion.ASCII不包含127以外的值,但我假设您正在计算ISO-8859-1之类的更高的代码点。如果它包含“ë”怎么办?移位量大约为38。1您可以用int表示2^32个可能的值。str是一个字符串,它只能包含ASCII字符集的值。当然。但是u似乎将其用作一个位集,以指示事物的存在/不存在。这样一个集确实有2^32个可能的状态,但是,它可以在该集中表示的对象的宇宙有32个元素。您的代码将无法工作,因为移位可能大于32,这只是溢出了int的顶部。您的掩码没有设置任何元素那样的话。你能举一个它溢出的例子吗。这样会更容易理解。如果字符串包含