JAVA学习日记_Day3

本文详细介绍了计算机中数值的表示方式,包括原码、反码和补码的概念及其应用,解释了为何使用反码和补码进行运算。同时,对比了逻辑与和按位与的区别,以及移位操作和三元运算符的使用。

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

原码、反码、补码

机器数
一个数在计算机中的表现形式叫做机器数,这个数有正负之分,在计算机中用一个数的最高位(符号位)用来表示它的正负,其中0表示正数,1表示负数。

例如正数7,在计算机中用一个8位的二进制数来表示,是00000111,而负数-7,则用10000111表示,这里的00000111和10000111是机器数

真数
计算机中的机器数对应的真实的值就是真数,对最高位(符号位)后面的二进制数转换成10进制,并根据最高位来确定这个数的正负。对于上面的00000111和10000111来说,对最高位后面的二进制数转换成10进制是7,在结合最高位的值,得出对应的真数分别是7和-7

原码
用第一位表示符号,其余位表示值。因为第一位是符号位,所以8位二进制数的取值范围就是:[1111_1111 , 0111_1111]  即 [-127 , 127] ,原码是容易被人脑所理解的表达方式

反码
正数的补码反码是其本身,负数的反码是符号位保持不变,其余位取反。例如正数1的原码是[0000_0001],它的反码是是其本身

[0000_0001],-1的原码是[1000_0001],其反码是[1111_1110]

补码
正数的补码是其本身,负数的补码是在其反码的基础上+1,例如正数1的原码是[0000_0001],他的补码是其本身[0000_0001],

-1的补码是[1111_1111]

有了原码为什么要使用反码和补码
因为人脑可以知道第一位是符号位,可以根据符号位对真值的绝对值进行加减乘除,但是对于计算机来说,加减乘除是最最最基本的运算,要设计的尽量简单,计算机辨别符号位会让计算机的设计电路变得很复杂,于是人们想出了让符号位也参与到运算上来。减去一个数,等于加上他的负数。

 

原码:负数加法有问题

2+1 = [0000_0010]原+[0000_0001]原=[0000_0011]原 = 3

1+-1=[0000_00001]原+[1000_0001]原=[1000_0010]原=-2

反码:解决负数加法。

-2+1=[1111_1101]反+[0000_0001]反=[1111_1110]反=-1

补码解决跨0问题。

由于[1111_1111]+[0000_0001]=[0000_0000],所以在负数反码的基础上+1就可以解决反码中跨0的误差问题,同时不会对负数与它对应的二进制反码的同步递增产生影响,所以在反码的基础上+1就完美的解决了符号参与预算的问题,这就是补码为什么是在负数反码的基础上+1的由来。

 

逻辑与&&和按位与&的区别

       逻辑与&&:逻辑与是逻辑运算符,由逻辑运算符及操作数组成逻辑表达式。逻辑与运算:只有当所有的操作数都为true的值时,表达式的结果才为true,否则为false。

 

       按位与&:是位运算符,是将操作数以二进制位的形式进行计算。位运算的操作数只能是整数类型。同逻辑与类似,只不过操作数变成了0和1。0相当于false,1相当于true。即:0&0=0, 0&1=1, 1&0=1, 1&1=1。

 

负数的二进制:

(int)-4的二进制编码

原码(4的二进制原码最高位变1):

1000 0000 0000 0000 0000 0000 0000 0100

补码:

1111 1111 1111 1111 1111 1111 1111 1011

反码:

1111 1111 1111 1111 1111 1111 1111 1100

计算机中负数用反码表示。

 

求‭1111111111111111111111111111111111111111111111111111111110000000‬是多少?(int类型)

最高位是1,所以是负数。先把补码转换成反码,-1就行

‭1111111111111111111111111111111111111111111111111111111101111111‬(反码)

再把反码转换成原码(最高位不变)

10000.......0000 1000 0000(结果是-128)

 

移位操作:

左移是乘,右移是除。(右移最高位是1则要补1,为负数制定的规则)

三元运算符:

boolea b =20<45?true:false。

如果20<45结果为真则返回true否则返回false。

隐式转换:

低级向高级系统会自动转换。

byte<short<int<long<float<double。

显式转换:

int a = 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值