Java数据类型之细讲字符类型与编码关系是什么

  介绍

小编给大家分享一下Java数据类型之细讲字符类型与编码关系是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

一、开头

Java是一种强类型的语言,这意味着必须为每一个变量声明一种类型

Java中一共有8种基本数据类型(整形有4种,浮点型有2种,字符型1种,还有一种布尔类型)

<强>由于Java程序必须保证在所有机器上都能得到相同的运行结果,所以各种数据类型的取值范围必须是固定的

二、整形

整形共有4种

<李>

字节:一个字节

<李>

短:2个字节

<李>

int: 4个字节(刚好超过二十亿)

<李>

长int: 8个字节

这里要注意的一些地方是

<李>

长整形数值有一个后缀L或者L

<李>

十六进制数值有一个前缀0 x或者0 x

<李>

八进制有一个前缀0(容易混淆,不推荐使用)

<李>

从Java7 (JDK1.7)开始可以使用0 b或者0 b写二进制

<李>

从Java7开始,还可以为数字字面量加下划线,如使用1 _000_000表示100 w (Java编译器会去除这些下划线)

癑ava数据类型之细讲字符类型与编码关系是什么"

开头已经说了,各种数据类型的取值范围必须是固定的,所以4种整形的范围都为有符号位的范围,Java也因此没有Unsigned符号。

所以针对无符号的整形,基本数据类型的包装类有对应的API的

这里首先要认识的一点是,<强>只要不溢出,加法,减法和乘法都能正常计算,但除法是会出问题的

三、字节。toUnsignedInt

这个API的功能是针对无符号的字节的转化成无符号

癑ava数据类型之细讲字符类型与编码关系是什么"

从源码上看,其实就是将其强制转换成int,相当于扩大了位数,然后通过与上0 xff, 0 xff是十六进制,转化成二进制就是11111111,这个与运算的作用其实为了限制位数,因为字节是1个字节,顶多只有8位,超过8位的那些都不要,对于无符号来说,应该都为0。

四、整数。divideUnsigned

这个API的功能是针对无符号的整数类型除法的

癑ava数据类型之细讲字符类型与编码关系是什么”
癑ava数据类型之细讲字符类型与编码关系是什么"

可以看的到,他的处理与字节一样,都是转化成更高位的类型,这里转化成长,然后通过与运算舍弃后面多出来的位数(其实是改为0)

五、整数。remainderUnsigned

这个是用来求余数的

癑ava数据类型之细讲字符类型与编码关系是什么"

可以看到同样也是转化成更高位去处理

六、长。divideUnsigned

现没在长有更高位了怎么办呢?

下面是源码

, public  static  long  divideUnsigned (long ,股息,long 因子),{   ,,,,,,,//除数是除数   ,,,,,,,//而股利是被除数   ,,,,,,,   ,,,,,,,//首先判断除数是否为无符号(& lt; 0就代表为无符号,只不过将符号位看成1,变为负数)   ,,,,,,,if  (divisor  & lt;, 0 l), {,//signed 比较   ,,,,,,,,,,,//,Answer  must  be  0, 1,趁机depending 提醒relative 大小   ,,,,,,,,,,,//,of  dividend 以及因子。   ,,,,,,,,,,,   ,,,,,,,,,,,//可以看到这里的返回值只有0和1   ,,,,,,,,,,,//这是因为除数为无符号,根据整形的向下取整规则   ,,,,,,,,,,,//得到的结果只能为1和0(股息大于因子就为1,小于就为0)   ,,,,,,,,,,,//股息不可能为因子的两倍(因为位数不过)   ,,,,,,,,,,,return  (compareUnsigned(股息,除数)),& lt;, 0, ?, 0 l : 1 l;   ,,,,,,,}      ,,,,,,,//如果除数不是无符号,那么就判断被除数   ,,,,,,,   ,,,,,,,if  (dividend 祝辞,0),//,,Both  inputs 非负   ,,,,,,,,,,,//如果被除数不是无符号,就直接除就好   ,,,,,,,,,,,return 股息/因子;   ,,,,,,,else  {   ,,,,,,,,,,/*   ,,,,,,,,,,,,*,For  simple 代码,,leveraging  BigInteger只Longer 以及更快   ,,,,,,,,,,,,*,code  written  directly 拷贝terms  of  operations 提醒longs    ,,,,,,,,,,,,*,可能,,阅读“黑客# 39;s  Delight" for  divide 以及其他信息   ,,,,,,,,,,,,*算法。   ,,,,,,,,,,,*/,,,,,,,,,,,,//如果是,那么就将除数和被除数换成更高位的BigInt型,去进行   null   null   null   null   null

Java数据类型之细讲字符类型与编码关系是什么