常量以及数值问题
常量定义
在 Java 语言中,主要是利用关键字 final 来定义一个常量。常量一旦被初始化后不能 再更改其值。
常量声明格式为: final type varName = value; 例如 final PI = 3.14;
Java 语言整型常量的四种表示形式
- 十进制整数,如:99, -500, 0 。写法:0 1 2 3 4 5 6 7 8 9 10 ...
- 八进制整数,要求以 0 开头,如:015 。写法:0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20....
- 十六进制数,要求 0x 或 0X 开头,如:0x15 写法:0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
- 二进制数,要求 0b 或 0B 开头,如:0b01110011 写法:0 1 10 11 100 101 110 111 1000.....
Java 浮点类型常量有两种表示形式
- 十进制数形式,例如:3.14 314.0 0.314
- 科学记数法形式,如 3.14e0 3.14E2 3.14E-1
常量规约
【强制】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
正例:MAX_STOCK_COUNT / CACHE_EXPIRED_TIME
字节
- 计算机在任何情况下存储数据的时候,都是以二进制的补码的方式存储。
- 一个二进制位,也就是一个1或一个0,这一个二进制位被称为1个比特位。(1bit)
- 8个比特位是1个字节。(1byte = 8bit)
- 1个字节是8个二进制位组成。(11111111,这是一个字节)
- 数据类型所占用的字节数量:byte short int long float double boolean char , 12484812
二进制
计算机二进制包括三种形式:
- 原码、反码、补码
- 对于正数来说:
- 原码、反码、补码完全一致。
- 比如:1这个数字它的原码反码补码都是:00000001
- 对于负数来说:
- 原码:比如-1,对应的原码是:10000001
- 反码:原码的符号位不变,其它位都取反:11111110
- 补码:反码+1就是补码。11111111
进制转换
进制转换
(1)其他进制到十进制
系数:就是每一个位上的数值
基数:x进制的基数就是x
权:对每一个位上的数据,从右,并且从0开始编号,对应的编号就是该数据的权。
结果:系数*基数^权次幂之和。
(2)十进制到其他进制
除基取余,直到商为0,余数反转。
(3)进制转换的快速转换法
A:十进制和二进制间的转换
8421码。
B:二进制到八进制,十六进制的转换
关于二进制位的符号位
对于数字类型来说:byte,short,int,long,float,double,他们都是有正负之分的,所以这些类型的数字对应的二进制位最左边的那个二进制位是符号位。
最左边的二进制位是1表示该数字是负数,0表示该数字是正数。
boolean和char没有正负之分。
byte的最大值:01111111(127),01111111 = 10000000 - 1 = 2^7 - 1
byte既然是1个字节,它就可以表示256(11111111)种不同的情况.
byte类型取值范围:[-128 ~ 127]
同理:可以根据byte推算出其他类型的取值范围。
long x = 100L;
int y = (int)x;//100
//100L对应的二进制是: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 01100100
//8个字节的Long转换4个字节的int,结果为00000000 00000000 00000000 01100100 = 4 + 32 + 64 = 100
byte x = (byte)235; //21
// int类型的235对应的二进制:00000000 00000000 00000000 11101011
//将4个字节的235转换成byte类型1个字节:11101011
//11101011现在是一个补码
// 11101011它的第一个符号位是1,表示负数。
// 第一步:补码-1是反码:11101010
// 第二步:反码的符号位不变,其余位都取反:10010101
十进制数 29 转成二进制就是:11101
二进制1011010转换成十进制为90
小数问题
浮点型数据在内存当中是如何存储的?3.14在内存中是怎么存的?
计算机存储浮点型数据的时候遵循了一个存储规范:IEEE754标准。
IEEE754标准 (二进制浮点数算术标准)
float类型占用32个二进制位
IEEE754标准将32个二进制位划分成了3部分。
从左边的二进制位开始:
第1个二进制位是:符号位[S](1表示负数,0表示正数)
第2~9个二进制位是:指数位[E](8个二进制位)
第10~32个二进制位是:尾数位[M](23个二进制位)
3.14这是一个浮点型数据,就是要搞明白,这个3.14在内存中是怎样的一个二进制位。
由于float的特殊存储结构,导致了float虽然是4个字节,但是比8个字节的long类型容量还要大。(E最大值可以达到255,即float最大值可以达到2^128,,这显然比2^63大)
本文来自博客园,作者:小孙不是程序员,转载请注明原文链接:https://www.cnblogs.com/sunlincode/p/16717741.html