java char、int和字符之间的简单理解

 2024-02-28 00:05:30  阅读 0

有时候我们会发现,在哈希函数算法中,往往会将字符串的每个字符转换为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中,无论是A字符还是字符变量,但实际上它也是一个数字,我们可以将范围较小的数字转换为范围较大的数字。 例如,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);
    }

结果如下:

java判断特殊字符_java中特殊符号_java判断特殊符号

101010011001000
21704
21709

这里我们以中文为例。 在JAVA中,中文默认的编码是16位两个字节,char也是16位,所以也是可以转换的。 ‘ha’对应的二进制是1000,代表十进制。 是21704,所以加5就是21709。

java判断特殊符号_java判断特殊字符_java中特殊符号

这是一个简单的附加哈希示例,它使用了这种转换

/**
* 加法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);
}

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码