java中char类型怎么转int?char与int和字符之间的简单理解
有时候我们会发现,hash函数算法里经常会将一个字符串每一个字符转成char后跟int值相加,然后来做处理,那么为什么char可以跟int相加呢,那中文char可不可以跟int相加呢?,我来为大家科普一下关于java中char类型怎么转intchar与int和字符之间的简单理解?下面希望有你要的答案,我们一起来看看吧!
java中char类型怎么转intchar与int和字符之间的简单理解
有时候我们会发现,hash函数算法里经常会将一个字符串每一个字符转成char后跟int值相加,然后来做处理,那么为什么char可以跟int相加呢,那中文char可不可以跟int相加呢?
我们知道在java语言中,int类型是一个32位的数据类型,因为其位有符号数,所以,其取值范围为:-2^31 至 2^31 - 1。而char为16位的数据,为无符号数,其范围为:0 至 2 ^ 16 -1,即0 - 65535,用十六进制码来看,则为:’\u0000’ - ‘\uffff’。再从前面引言中对于ascii码的描述,我们可以看出,无论是什么字符,在计算机中,其实也是以数字(本质为一个二进制数)的形式存储的,因此,在java中,无论是一个字符,还是一个字符型变量,实则也是一个数字,并且我们可以把范围较小的数字转换到一个范围较大的数字,如32位的int类型到64位的long是可以隐式转换的,即可以直接把一个int类型的变量赋给一个long类型的变量。当然也可以把16位的char类型转到32为的int。代码如下:
public class hashUtils {
public static void main(String[] args) {
char a = '哈';
System.out.println(Integer.toBinaryString((int)a));
System.out.println((int)a);
System.out.println(a 5);
}
结果如下:
101010011001000
21704
21709
这里直接以中文为例,在JAVA中,中文是默认用Unicode编码是16位两个字节,而char他也是16位,所以也可以转换,’哈’对应的二进制是101010011001000,代表的10进制是21704,所以加上5就是21709.
这里举个简单的加法Hash的例子,就是用了这种转换
/**
* 加法Hash
* @param key
* @param prime 这里的prime是任意的质数,看得出,结果的值域为[0,prime-1]。
* @return
*/
public static int additiveHash(String key, int prime){
int hash, i;
for (hash = key.length(), i = 0; i < key.length(); i ) {
hash = key.charAt(i);
}
return (hash % prime);
}
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com