计算机底层全部存储的是数字,不同的数据类型代表分配不同的数据长度,如果是char,计算机先分配大小,再存数字,然后根据类型使用对应的编码显示char的字符(1字节8B=2的8次方,独特的数字代表一个字符比如97对应a),原本只有abcd…等使用ascii没有问题,但随之增多的汉字还有其他字符串,引申出了使用更多字节引入更多数字对应字符,十分遗憾, 经过一段时间, 不可避免的事情发生了。Unicode 字符超过了 65 536 个,其主要原因是增加了大量的汉语、 日语和韩语中的表意文字。现在,16 位的 char 类型已经不能满足描述所有 Unicode 字符的需要了。
位运算符
处理整型类型时,可以直接对组成整型数值的各个位完成操作。这意味着可以使用掩码
技术得到整数中的各个位。位运算符包括:
& (“and”) | (“or”) ^ (“XOr”) ~ (“not”)
这些运算符按位模式处理。例如, 如果 n 是一个整数变量,而且用二进制表示的 n 从右
边数第 4 位为 1,则
int fourthBitFromRight = (n & 0b1000) / 0b1000;
会返回 1,否则返回 0。利用 & 并结合使用适当的 2 的幂, 可以把其他位掩掉, 而只保留其
中的某一位。有点复杂,不太好懂
之前两个操作数都需要计算
另外,还有<<>>和 运算符将位模式左移或右移。需要建立位模式来完成位掩码时, 这
两个运算符会很方便:
int fourthBitFromRight = (n & (1« 3)) » 3;
最后,>>> 运算符会用 0 填充高位,这与<<不同,它会用符号位填充高位。不存在<<<
运算符。
4 警告: 移位运算符的右操作数要完成模 32 的运算(除非左操作数是 long 类型, 在这种情
况下需要对右操作數模 64 )。
例如, 1 <<35 的值等同于 1 <<3 或 8。
® C++ 注?:在 C/C++ 中,不能保证>>是完成算术移位(扩展符号位)还是逻辑移位(填
充 0。) 实现者可以选择其中更高效的任何一种做法。 这意味着 C/C++ >>运算符对于负
数生成的结果可能会依赖于具体的实现。Java 则消除了这种不确定性
Unicode 和 char 类型
最新推荐文章于 2024-06-14 18:28:08 发布