java复习2(编码)

1补充知识点:

重要概念

    一个整数a=14,那么

    a对应的二进制数值b=01110。

    a对应的原码c=01110.

    注意b和c虽然都是1110,但是两个是不同的,b是a对应的二进制数值,c是b这个数据值在计算机为了表示这个值所进行的编码。b的最高位可以省略 c的最高位确是符号位不能省略。

1.1 数据与文字的编码

根据计算机中信息的编码表示方式,将数据分为“定点数据”、“浮点数据”、“图形数据”和“文字数据”

“定点数”是指小数点位置固定不变的数。如整数 2700和纯小数0.123。

“浮点数”是指小数点位置变化的数 如浮点数 123.567。

通过两个例子就看出了“定点数”和“浮点数”的差别了。

“定点数”和“浮点数”统称为”数值编码

 

点定数在计算机中可以使用原码、补码、反码来表示。

 

在java语言中,你就认为 byte、short、char、long是补码表示的。

补码 表示法也是用最高一位代表符号,其余各位代码表示数值。

 

对于一个整数x,补码的编码方式为:

正数的补码与源码相同,

负数的补码将x的二进制位按位取反后再最低位加1.

 

如 正整数x=1010 则 x的原码=01010;x的补码=01010

如 负整数y=-1010 则y的原码=11010;y的补码=10110

 

对于一个纯小数x=0.1010 y=-0.1010  (这个可以忽略)

x的原码 = 0.1010 x的补码=0.1010

y的原码 = 1.1010 y的补码 =1.0110

 

求一个负数的补码的另一个方法: 从最低位开始,对遇到的0和第一个1取其原码,从第一个1之后开始直到最高位均按位取反。

 

补码的特点:

1.负数比正数多一个,零有唯一的编码,即0000....0。

怎么理解这句话呢?

举例用一个四位二进制数表示一个数,其中最高位是符号位。

正数的范围为0 001 ---到0 111 对应十进制数为 1到7

负数的范围为1 000 ---到1 111 对应十进制数为 -8到-1

就多出来这个1000(对应的-8 这是根据补码的数值计算公式得出的)

一个n+1为负整数的补码,其数值计算公式为

   

本例的n+1位为4,然后n也就3,所以:

  1 000对应十进制值 = - 1*(2*2*2)+0*(2*2)+0*(2)+0 = -8

 

零 就是 0000  (也是使用补码表示数值的原因之一 用补码表示数 0 值唯一  用原码表示数的时候 0 值有两个+0和-0)

 

2.将一个数的补码按位取反,在最低位上加1后就得到它的相反数的补码。经常用这个特点求一个负数的补码

如 正6(补码是0110)的相反数是 -6(1010)

这个特性非常重要,

应用于

(1)求一个负数的补码时,先求这个数相反数(也就是一个整数)的补码,通过这个特性求出这个负数的补码。

如 a=-6 求a的补码。  

1. a的相反数为 6

2. 6的补码是 0110

3. 根据这个特性求得a的补码为1010

(2)求一个负数补码对应的十进制值时,使用上述公式比较麻烦,而使用这个特性就简单多了。

如 求补码1010对应的十进制值。

1.1010的最高位是1 所以知道此数为负数。

2.根据这个特性求出对应的相反数(正数)为0110.

3.这个正数0110对应的十进制值为6.

4.将负号加到6上,就得到了-6。

 

 

下面是了解:

浮点数通过尾数和阶码的概念来表示。

怎么理解呢?例子如下

12.8这个浮点数可以通过科学记数法来表示 即 0.128*102

128对应的二进制原码是0100000000

2对应的二进制数是10

那么 在计算机中怎么表示这个数呢?

”10“放入尾数,0100000000放入阶码,将0放入符号

这样0 0100000000 10 这一串就表示12.8这个浮点数

也就是 将12.8 编码为0 0100000000 10

 

文字编码(也就是java的字符编码或字符串编码)

1.西文字符的编码:

ASCII码:用8个二进制位表示,最高位是0,余下7位可以给出128个编码,表示128个不同的字符

其中95个对应英文字母、数字等可显示和可打印的字符。另外33个字符的编码值为0-31127

表示一些不可显示的控制字符。

33个控制字符如下:

0 NUL(null) 空字符、 1 SOH(start of headline) 标题开始 2 STX (start of text) 正文开始、  3 ETX(end of text) 正文结束、 4 EOT (end of transmission) 传输结束 5 ENQ (enquiry) 请求、6 ACK (acknowledge) 收到通知 7 BEL (bell) 响铃 8 BS (backspace) 退格、9 HT (horizontal tab) 水平制表符 10 LF (NL line feed, new line) 换行键 11 VT (vertical tab) 垂直制表符、12 FF (NP form feed, new page) 换页键 13 CR (carriage return) 回车键 14 SO (shift out) 不用切换、15 SI (shift in) 启用切换 16 DLE (data link escape) 数据链路转义 17 DC1 (device control 1) 设备控制118 DC2 (device control 2) 设备控制2 19 DC3 (device control 3) 设备控制3 20 DC4 (device control 4) 设备控制421 NAK (negative acknowledge) 拒绝接收 22 SYN (synchronous idle) 同步空闲 23 ETB (end of trans. block) 传输块结束、24 CAN (cancel) 取消 25 EM (end of medium) 介质中断 26 SUB (substitute) 替补、27 ESC (escape) 换码(溢出) 28 FS (file separator) 文件分割符 29 GS (group separator) 分组符、30 RS (record separator) 记录分离符、 31 US (unit separator) 单元分隔符 32 space 空格、127 DELdelete 删除)

 

计算机的键盘能将用户单击的按钮用ascii编码的形式传送给主机。

 

2.汉字的编码:

汉字编码=输入用的编码+机内存储的编码。

输入码分为:数字编码、拼音码、字形码(如五笔)

怎么理解呢?如拿拼音码举例,对于”shang“这个拼音它对应

其中”shang“这个拼音就需要编码。

机内码:

GB2312规定了3755个最常用汉字和3008个较常用汉字。

图中重点:

1 十六进制81对应的二进制是1000 0001 ASCII码首码为0

2 ”GB18030采用单字节、双字节、四字节的三种方式编码,全面兼容了ASCII码和GB2312“

的意思是:在GB18030编码库中,十六进制的00---7F这个单字节码就是对应了ASCII码。

3 最后一句计算机中的汉字编码都是软件定义和处理的

3.十进制数的编码:

1.2 定点数的加减运算

 

在数据运算中,参与运算的数据又成为”操作数(operand)“。

   1 定点的数的补码加法公式:

                [x]补 + [y]补 = [x+y]补  就是两个数的补码相加,其结果就是这个两个数相加后的补码。

            如x = 13,y=8 ,x+y=21,

               则[x]补=0 01101  ,   [y]补=0 01000  [x+y]补=0 10101

        定点的数的补码减法公式:

                [x]补 - [y]补 = [x-y]补 = [x]补 + [-y]补

   2.溢出的检测方法:

        上述补码加减运算成立的前提是运算结果”不溢出“。

        对于加法,只在正数加正数和负数加负数这两种情况下才会溢出。符号位不同的两个数相加不会产生溢出。

        对于减法,只在正数减负数和负数减正数这两种情况下才会溢出。符号位相同的两个数相减不会产生溢出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值