Java进制与二进制数据的存储

本文详细介绍了二进制、十进制、八进制和十六进制等不同进制的概念,并探讨了正数和负数在计算机中的存储方式。通过实例解释了二进制补码的计算方法,以及如何从二进制补码还原成十进制数值。此外,还简单提及了浮点数的存储原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:进制
对于整数,有四种表示方式
二进制:0、1,满2进1,以0b或者0B开头(零b,数字零)
十进制:0-9,满10进1
八进制:0-7,满8进1,以数字0开头
十六进制:0-9及A-F,满16进1,以0x或者0X开头,A-F不区分大小写

二:正数与负数的存储
我们都知道数据在计算机中以二进制存储。那么到底如何表示,以及的得到一个计算机存储形式的数据如何转化为我们熟悉的十进制呢?

正整数转化为二进制数即可

这里写图片描述

那么正小数如何转换与存储呢?

这里写图片描述
这里写图片描述
那么会遇到两种情况:
1、乘2结果超过1,即结果为1.*****,那么取小数继续乘2
2、永远得不到一个整数,这就涉及到了float与double的精确度,想了解相关知识的网友可以查找计算机基础的相关书籍(大学生的话,推荐中国慕课网南京大学的计算机基础课程)。

负数的存储:
不理符号,将数字转化为二进制数(源码),按位取反(反码),最后加一(得到补码),就得到了负数的计算机存储方式。即负数在计算机中以补码形式存储。

//举一个简单的例子,-1的转化,假设为8bit(一个字节为8bit)
//10000 0001---源码)
//21111 1110---反码)
//31111 1111---补码)

那么我们如何将计算机的数转化为我们熟悉的数字呢?
我们先了解一下基本的规则,二进制的首位数字1代表负数,0代表正数。

我们还是以-11111 1111)举例子,
-1*27方+1*26方+1*25方+1*24方+1*23方+1*22方+1*21方+1*20方=-1;

所以我们一般得到一个类型可以表示的最大值(以一个字节为例)
0111 1111=1*2的7方-1
那么越界时,就变为了
1000 0000=-1*2的7方
所以byte类型的范围为(-128-127)

//如果对负数取模,可以把模数负号忽略不记,如:5%-2=1;
System.out.println("5+5="+5+5);//5+5=55    --输出结果
int x=4;
x*=4+5;//x=36;先计算后面的结果再相乘赋给x

三:运算符
instanceof关键字 //检查是否是类的对象

"Hello" instanceof String  //true;

这里写图片描述
这里写图片描述

位运算符是直接对二进制数进行操作,速度很快,但是不利于程序员编写程序。
ps:<<< 与>>>是逻辑运算符,缺位直接补0即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值