java中char类型怎么转int?char与int和字符之间的简单理解

有时候我们会发现,hash函数算法里经常会将一个字符串每一个字符转成char后跟int值相加,然后来做处理,那么为什么char可以跟int相加呢,那中文char可不可以跟int相加呢?,我来为大家科普一下关于java中char类型怎么转intchar与int和字符之间的简单理解?下面希望有你要的答案,我们一起来看看吧!

java中char类型怎么转int?char与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

    分享
    投诉
    首页