Java中的ascii字符表示法?
如果我使用单个int来表示ascii字符集,那么如何使用它将存储空间减少8倍?与256个布尔值的数组相比?单个int的功能也类似于位向量 java中的布尔值将占用1位,因为它只能表示真值或假值。例如,如果我有一个布尔值数组。布尔[]字符集=新布尔[256]这将占用256位,对吗?我读到,如果我使用一个int,比如位向量,这意味着我可以使用32位来覆盖256个值。我想这是减少了8倍。但是为什么下面的代码可以工作呢 它正在检查字符串中是否有任何重复项。他们假设一个ascii字符集。Str是一些字符串Java中的ascii字符表示法?,java,Java,如果我使用单个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的顶部。您的掩码没有设置任何元素那样的话。你能举一个它溢出的例子吗。这样会更容易理解。如果字符串包含