进制& Java基本数据类型简单整理

二进制

  • 计算机有两种基础状态, 0和1也就是二进制, 表示的是开关. 因为中央处理器(CPU)和基本所有的电子元件也都只识别0和1
  • 计算机最小的存储单位是字节(byte), 一个字节有8个二进制位(bit), 可以存储十进制数范围是无符号时0255和有符号时-128127

运算


加运算(进位规则是逢2进1): 0+0=0, 0+1=1, 1+0=1, 1+1=10
减运算(降位规则是从高位借1当2): 1-1=0, 1-0=1, 0-0=0, 0-1=1
乘运算(只在同时为1时结果才为1): 0×0=0, 0×1=0, 1×0=0, 1×1=1
除运算: 0÷1=0, 1÷1=1

例: 
10100 # 当0-1时由于是逢2进1的, 所以从高位借1当2, 因此2-1所以1
-1010
-----
+1010
10100
-----
11110

二进制转八进制

二进制数八进制数
0000
0011
0102
0113
1004
1015
1106
1117
  • 即从二进制的小数点为分界点, 向左或右按每三位分组, 注: 位数不够补零, 零只能补在最左或最右 例: 1011.11 -> 001 011 . 110 -> 13.6

二进制转十进制

  • 每个位的数值单独转换后将所有的结果求和. 例: 1011= 1×2^3 + 0×2^2 + 1×2^1 + 1×2^0(=1) =11, 1010= 1×2^3 + 0×2^2 + 1×2^1 + 0×2^0(=0) =10

二进制转十六进制

二进制数十六进制数
00000
00011
00102
00113
01004
01015
01106
01117
10008
10019
1010A
1011B
1100C
1101D
1110E
1111F
  • 每四位分组, 位数不够补零 例: 101101= 0010 1101 =0x2D

原码, 反码, 补码

  • 所有数字在计算机底层都以二进制形式存在
  • 计算机以补码的形式保存所有的整树
  1. 正数的原码, 反码, 补码都相同
  2. 负数的补码是其反码加1
  • 原码: 直接将一个数值换成二进制数
  • 反码: 是对原码按位取反, 只是最高位(符号位)确定为1
  • Java整数常量默认是int类型, 当用二进制定义整数时, 其第32位是符号为; 当是long类型时, 二进制默认占64位, 第64位是符号位

0 000 1101 = 13; 正数时原码, 反码, 补码都是这个
1 000 1101 = -13;负数的原码
1 111 0010 = -13;负数的反码, 除符号位外取反
1 111 0011 = -13;负数的补码, 是反码的基础上+1
注意: 不管是正数还是负数都是按补码的形式存到 byte的, 只不过正数是(原码, 反码, 补码)都相同

负数15(-15)存到 byte, 计算机会自动转为补码 11110001
1 111 0001: 这个肯定就是负数的补码, 因为首位是1
1 111 0001 减1(- 1) 补码改成反码 1 111 0000
1 111 0000 取反将反码改成原码 1 000 1111 = -15
1 000 8 4 2 1 = -15

byte字节能存的正数最大值为127:
0 111 1111 = 127 
0 64+32+16+8+4+2+1+0 = 127

-127的补码:
0 111 1111 = 127 反码 1 000 0000
1 000 0000 补码+1 = 1 000 0001 = -127

-128的补码: 
以 1 000 0001(-127)的基础上 -1
1 000 0000 = -128

二进制特性

  • n位指的是从右往左, 0开始数
  1. 指定二进制数的低端n位都是零, 这个数可以被2^n整除也就是不会有余数. 例: 24(11000)÷4(2^2)=6
  2. 指定二进制数的第零位(最右)数是1时, 对应十进制数是奇数; 否则是偶数. 例: 1111=15, 110=6
  3. 指定二进制数的第n位是1, 而其它位全是0时, 这个数等于2^n. 例: 4(100)=4(2^2), 2(10)=2(2^1)
  4. 指定二进制数的第零位到第n位(不包含n位)全是一, 而其它位全是0, 这个数等于2^n-1. 例: 7(111)=7(2^3-1), 3(11)=3(2^2-1)
  5. 指定二进制数的所有位左移一位, 结果是对应十进制数的乘以2. 例: 11=3 -> 110=6, 111=7 -> 1110=14
  6. 指定二进制(只适用无符号)数的所有位右移一位, 结果是对应十进制数的除以2, 余数会被舍弃. 例: 111=7 -> 11=3, 110=6 -> 11=3
  7. 当两个n位二进制数相乘, 结果位到2×n. 例: 111100=11100 -> 22=4(5个位)
  8. 当两个n位二进制数相加或相减时, 结果位肯定不会多于n+1位. 例: 111-100=11 -> 2+1=3(4个位), 111+111=1110 -> 2+1=3(4个位)
  9. n个位二进制可以表示2^n个不同的组合. 例: 10: 4个(2^2) -> [10|01|11|00], 1: 2(2^1) -> [1|0]
  10. 十进制数2^n-1(n个位), 转二进制后全是1. 例: 11=3(2^2-1), 111=7(2^3-1)
  11. 已限定位长度(个数限定)的无符号二进制, 当最大数值时再加1结果将是0, 因为位溢出. 例: 1+1=0, 11+1=00, 111+1=000
  12. 已限定位长度(个数限定)的无符号二进制, 当值为0时减一结果将是最大数. 例: 0-1=1, 00-1=11, 000-1=111
  13. 已限定位长度(个数限定)的有符号二进制, 所有位取反, 再将结果减1, 最终结果是对应十进制数的取反

八进制

  • 由8个基数组成[0-7], 进位规则是逢8进1

八进制转十进制

  • 每个位的数值单独转换后将所有的结果求和. 例: 0172= 1×8^2 + 7×8^1 + 2×8^0(=2) =122

十进制

  • 这是我们日常用的数, 10个基数[0-9], 进位规则是逢10进1

十进制转二进制

  • 指定十进制数除以2后能除净是0否者是1将此数记录下来, 依次再用结果继续除, 直到剩余值小于2;最后把记录下来的二进制结果翻转过来就是实际二进制了. 例: 22= 0(22/2), 1(11/2), 1(5/2), 0(2/2), 1(1/2) =10110(翻转后)

十六进制

  • 由16个基数组成[0-9a-f], 进位规则是逢16进1

十六进制转十进制

  • 每个位的数值单独转换后将所有的结果求和. 例: 0x2A9F= 2×16^3 + 10×16^2 + 9×16^1 + 15×16^0(=15) =10911

进制间区分

  1. 末尾可以加字母区分 如二进制是B, 八进制是Q, 十进制是D, 十六进制是H 例: 二进制1010B
  2. 加前缀区分 如八进制以0开头, 与十进制区分 例: 0172. 十六进制是以0X或0x开头

进制位权: 各位上的数值大小是由位权来决定的. 位权是一个乘方值, 如二进制[…22,21,20,2-1,2^-2…], 十进制[…102,101,100,10-1,10^-2…] 例: 十进制234中2的位权是10(2), 3的位权是10(1), 4的位权是10(0).

Java基本数据类型

数值类型

基本类型字节数位数无符号值范围有符号值范围
byte1byte8bits0 ~ 255(2^8)-128(-2^7) ~ 127(2^7-1
short2bytes16bits0 ~ 65535(2^16)-32768(-2^15) ~ 32767(2^15-1)
int4bytes32bits0 ~ 4294967295(2^32)-2147483648(-2^31) ~ 2147483647(2^31-1)
long8bytes64bits0 ~ 18446744073709551615(2^64)-9223372036854775808(-2^63) ~ 9223372036854775807(2^63-1)

浮点类型

  • Java的浮点数是采用了 IEEE 754标准(二进制浮点数算术标准)
基本类型字节数位数值范围
float4bytes32bits尾数(mantissa)最多精确到7位小数, 取决于指数(exponent)的长度
double8bytes64bits尾数最多精确到16位小数, 取决于指数的长度

布尔类型

  • boolean类型没有精确大小, 单个 boolean类型的变量在编译时是按 int类型编译的也就是4个字节, 但如果是 boolean类型的数组, 每个数组元素按1个字节编译的

字符& 字符串类型

  • GB2312字符集编码能表示6763个汉字, 715个符号, 共7478个
  • GBK字符集编码能表示21003个汉字, 883个图形符号, 共21886个
  • UTF-8编码的汉子范围是[\u4e00-\u9fa5]& [\u2E80-\u9FFF], 未提供准确个数
  • char使用 UTF-8编码格式时 ASCII字符是1个字节, 中文是3个字节
  • char使用 GBK| GB2312编码格式时 ASCII字符是2个字节, 中文是2个字节
  • String使用 UTF-8编码格式时 ASCII字符是1个字节, 中文是3个字节
  • String使用 GBK| GB2312编码格式时 ASCII字符是1个字节, 中文是2个字节, 但全角字符的话是2个字节

如果您觉得有帮助,欢迎点赞哦 ~ 谢谢!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值