Java重学--03String?二进制?

1.String不是基本数据类型!!!是引用数据类型,字符串。

2.声明String类型变量时,使用一对“”

char c=''; 一个字符也不放 编译失败!!  必须有且只能放一个字符

3.string可以和8种数据类型做运算,只能做连接运算 (+)

4.char型你要看它是做运算还是做连接 做运算就是ascii码值做加法运算 做连接就是字符串 一定要注意是写单引号‘ ’ 还是双引号“ ” 双引号就是字符串了

切记!当byte、char、short三种类型的变量做运算时,结果为int型

5.

String str1=123+"";

int num=str1;❌编译失败

int num1=(int)str1;❌编译失败

Integer.parseInt(str1)✅

6.计算机都是以补码的方式来存储数据

补充一下反码补码的小知识:

1).反码的范围

反码表示法规定:正数的反码与其原码相同。负数的反码是对其原码逐位取反,但符号位除外。

在规定中,8位二进制码能表示的反码范围是-127~127。

此时(字长为8位), -128没有原码和反码(只有补码)。

那么,为什么规定字长8位时-128没有原码和反码呢?下面解释。

首先看-0,[-0]原码=1000 000,其中1是符号位,求反操作,算出[-0]反码=1111 1111,

再看-128,假如它有原码且[-128]原码=1000 000,假如让-128也有反码,求反操作,则[-128]反码=1111 1111,

你会发现,-128的反码和-0的反码相同,所以为了避免面混淆,有了-0的原码,便不能有-128的原码补码,这是8位比特位位数限制决定的。

2).原码 反码 补码的范围

前提:字长是8位二进制数。

原码  -127~127      128呢???不是说-128有原码 是1000 0000吗??

反码  -127~127

补码  -128~127

你会发现,补码比其它码多一位,这是为什么呢?问题出在0上。

[+0]原码=0000 0000,   [-0]原码=1000 0000

[+0]反码=0000 0000,   [-0]反码=1111 1111

[+0]补码=0000 0000,   [-0]补码=0000 0000   

你会发现,+0和-0的补码是一样的。即 0的补码只有一种表示。

这里解释一下[-0]补码是怎么得来的。

负数的补码就是反码整体加一。符号位上的进位舍弃。(所以,舍弃了符号位的补码的第一位是数值位,不是符号位,符号位舍弃了)

另外解释一下原码符号位和补码符号位的关系,补码的符号位不是保持原码的第一位不变,而是 符号位不变,[-0]反码的第一个1是符号位,尾数中的7个1是数值位,尾数加一后,数值位产生了进位,1111 1111+1=1 0000 0000(计算补码的过程中,并不是先保证第一位不变,而是保证符号位不变,保证补码规则是反码整体加一)。

所以,补码能表示的数的个数中,比原码反码少了一个,所以补码可以多表示一个真值为-128的数。

但是,多表示的这个数-128比较特殊,只有原码和补码,没有反码。

-128的补码是1000 0000。

 

3).-128的补码为什么是1000 0000

 

8位二进制的原值表达范围为:-127至127

共有256个组合序列 0000 0000 至1111 1111 。
+128的原值在8位中是表达不出来的。

 

下面从两个角度理解-128的补码为什么是1000 0000.

(1)从补码的意义上去理解 

因为:256-128=256+(-128)的补码 --机器中只有加法。减法会变成补码的加法。

而      256-128=128 
所以   256+(-128)的补码=128 
所以           (-128)的补码=256-128 
                                     =128 
数学上, 128=1000 0000 
故规定-128的补码为 1000 0000 

注意:只是规定而已,下面还有原因。

 

8位二进制 的补码组合序列有256个
0000 0000 - 0111 1111    0 ~+127
1000 0000                       用来干啥好呢?                              

1000 0001 - 1111 1111    -1~-127
 

再看看这个规律表
   原码            补码         值
0111 1111   0111 1111   +127
0111 1110   0111 1110   +126
     ...          .. 补码不断-1...
0000 0000   0000 0000     0
1000 0001   1111 1111    -1
1000 0010   1111 1110    -2
1000 0011   1111 1101    -3
    ...          .. 补码不断-1...
1111 1111   1000 0001 -127
无法表达     1000 0000 -128

 

于是就有了规定 1000 0000 定为 -128的补码
这种定法和上面数学层面的表述是一致的。

这样规定后,负数的补码在机器中就好算了。

 

计算方法上是:
将该负数取绝对值,再用二进制表示出这个绝对值 (不管符号位!)
对该二进制数进行取反加一操作就得到负数的补码了 (也就是求补操作!)
-128 绝对值是 128 
128的二进制表示为: 
1000 0000 
取反 
0111 1111 
加1 
1000 0000 
这就是-128的补码 
这种办法算出的结果符合“规定值”。

4).

    1字节 = 8位,所以它能表示的最大数当然是8位都是1(既然2进制的数只能是0或1,如果是我们常见的10进制,那就8位都为9,这样说,你该懂了?)

1字节的二进制数中,最大的数:11111111。

     双字节共16位。 1111111111111111。双字节数最大值为:

1 * 215 + 1 *214 + 1* 213 + 1 * 212 + 1 * 211 + 1 * 210 + …… + 1 * 22 + 1 * 21 + 1* 20 = 65535

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值