day03

小数的二进制转换:

十进制小数转二进制

      十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数 部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。

案例一: 把(0.8125)转换为二进制小数。
解: 

案例二: 把十进制小数0.625 转为二进制小数.

解:

0.625=(0.101)B
  0.625*2=1.25======取出整数部分1
  0.25*2=0.5========取出整数部分0
  0.5*2=1==========取出整数部分1

二进制小数转十进制

案例三: 把十进制小数0.1 转为二进制小数

           注意: 十进制的小数并不是都能够用二进制表示的.

              例如: 十进制0.1 转为二进制时,只能得到一个近似值 0.0001100110011001

二进制小数转十进制

       0.101 二进制转为10进制。

解:

     1*2^(-1)+0*2^(-2)+1*2^(-3))=0.5+0.125=0.625
 
 
浮点数的表示方法:
     

    Java 语言支持两种基本的浮点类型: float 和 double ,以及与它们对应的包装类 Float 和 Double 。它们都依据 IEEE 754 标准,该标准为 32 位浮点和 64 位双精度浮点二进制小数定义了二进制标准。

IEEE 754 用科学记数法以底数为 2 的小数来表示浮点数。IEEE浮点数用 1 位表示数字的符号,用 8 位来表示指数,用 23 位来表示尾数,即小数部分。作为有符号整数的指数可以有正负之分。小数部分用二进制(底数 2)小数来表示,这意味着最高位对应着值 ?(2 -1),第二位对应着?(2 -2),依此类推。对于双精度浮点数,用 11 位表示指数,52 位表示尾数。IEEE浮点值的格式如图 1 所示。


1. IEEE 754 浮点数的格式 
 请问浮点数9.0,如何用二进制表示?还原成十进制又是多少?

首先,浮点数9.0等于二进制的1001.0,即1.001×2^3。

那么,第一位的符号位s=0,有效数字M等于001后面再加20个0,凑满23位,指数E等于3+127=130,即10000010。

所以,写成二进制形式,应该是s+E+M,即0 10000010 0010000 0000 0000 0000 0000。

 

在数学中是将正号+ 负号- 放在绝对值前边表示该数是正数还是负数的,计算机只能识别0和1,使用的是二进制。计算机中就用一个数的最高位作为符号位,并用0表示正数,1表示负数。这样数的符号也可以用数字表示了。在计算机中,负数的二进制有3种表示方法:原码、反码和补码。任何正数的原码反码和补码形式完全相同,而负数则有各种不同的表示形式。

那么在计算机中,我们用二进制来表示数,所有的数可以分成两部分。一部分是符号,另一部分是数值,所以用二进制表示出来的数也就有了符号位和数值位之分。如果只表示一个数,我们称之为:真值;既有数又有符号的我们称之为机器码

正整数:

原码,补码,反码的符号位固定为0,数值位都是真值。所以一个正整数的原码,补码,反码是相同的。

负整数:

原码,补码,反码的符号位固定为1不变,数值位不相同。

原码的数值位是真值;

反码:原码数值位的每一位二进制数位求反得到;

补码:反码数值位最低位加1得到。

一.原码

8

原码:0000,1000

-8

原码:1 000,1000

二.反码

8

反码:0 000,1000

-8

反码:1 111,0111

三.补码

8

补码:0 000,1000

-8

补码:1 111,1000

为什么要用到原码、反码、补码

      

原码求和运算的问题:

       假设字长为8bits

       十进制  (1) 10 - (1)10= (1)10 + (-1)10 = (0)10 

              按照原码的表示规则,十进制的1 的原码是 00000001, 十进制的-1 原码是 10000001

       二进制  (0 0000001) + (1 0000001) = (1 0000010) = ( -2 ) 显然不正确。

       当1-1 就相当于 1+(-1) 执行二进制运算时结果为10000010 是-2 结果是错误的!!!

解决问题方案:

       在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上。对除符号位外的其余各位逐位取反就产生了反码反码的取值空间和原码相同且一一对应。

反码的减法运算:

        十进制: (1)10 - (2)10 = (1)10 + (-2)10= (-1)10

                二进制: (0 0000001) + (1 1111101) = (11111110) = (-1) 正确。

反码求和运算的问题:

       十进制: (1)10 - (1)10= (1)10 + (-1)10 = (0)10

              二进制:(0 0000001) + (1 1111110) = (1 1111111) = ( -0 ) 有问题。  

              问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的。

补码求和运算:

       负数的补码就是对反码加一,而正数的补码不变,正数的原码反码补码是一样的。

       十进制: (1)10 - (1)10= (1)10 + (-1)10 = (0)10

              二进制:(0 0000001) + (1 1111111) = (0 0000000) = ( 0 ) 正确。

              十进制:(1)10 - (2)10= (1)10 + (-2)10 = (-1)10

              二进制:(00000001) + (11111110) = (11111111) = (-1) 正确。

 

所以补码的设计目的是:

⑴ 使符号位能与有效值部分一起参加运算,从而简化运算规则。补码机器数中的符号位,并不是强加上去的,是数据本身的自然组成部分,可以正常地参与运算。

 

⑵ 使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计

[常量]
程序中固定不变的值
整形
长整形
浮点型
字符型
字符串(不是基本数据类型)
布尔型
null
[变量]
程序中一块有名字的内容,存储数据, 可以重复使用.
变量的声明
数据类型 变量名;
变量的初始化
变量名=数值;常量|表达式;
使用变量
通过变量名可以获取变量存储的数据.
注意:
变量的有效的取值范围... 
...
[运算符]
1.算术运算符
+ - * / % ++ -- 
2.赋值运算符
+= -= *= /= %= 
3.比较运算符
布尔结果
== != > < >= <= instanceof
4.逻辑运算符   
针对布尔值进行运算.会产生一个新的布尔值. 
&
两边必须都为true,结果才为true

两边必须都为false,结果才为false
                ! 
! true : false
! false : true

两边相同结果为false
两边不同结果为true. 
&& 
短路与, 当&& 左边为false,结果直接为false右边不在运算.
||
短路或, 当|| 左边卫true,结果直接为true....
5.位运算
直接操作二进制...
技巧0 变false 1 视为true. 就可以和逻辑运算符结合了...   
&



^    
当一个数异或同一个数两次结果还是那个数... 
~       将0 变1,1 变0 ,取反... 
6.移位运算
<<
>>
>>> 
7.三元运算符
条件表达式? 值1: 值2;
条件表达式: 返回布尔结果... 
当条件表达式为true, 取值1, 当条件表达式位false ,取值2. 
[数据类型的转换]
自动类型提升:
byte->short->int->long ->float ->double 
char -> int 
强制类型转换:
保留小数点的整数部分...
将(Unidoe数值转为字符..
int i=1;
byte b=(byte)i;
注意: 由于是将较大的类型的数值,赋值给了较小的类型的变量. 会溢出的问题...
使用要谨慎... (程序员自行处理了)
表达式的自动类型提升:
byte b1=1;
byte b2=2;
b1=b1+b2;  // 编译报错. 
执行+ 算术运算, byte 类型会自动提升为int 再运算...
byte short char 自动提升为int .
当参与运算的数,最大类型是long ,结果为long 
当参与运算的数,最大类型是float ,结果为float
...
作业:
day02的作业.
day02 文档中的练习题.
计算5000秒是多少小时,分钟,秒
交换数值
int i=3;
int j=5;
三种方式.




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值