位运算以及逻辑运算

二进制中的原码、反码、补码

要了解位移运算符我们就要先来了解 原码、反码、补码

 有符号数

要了解位移运算符我们就要先来了解 原码、反码、补码对于有符号数而言,符号的正、负机器是无法识别的,但由于正、负 “恰好是两种截然不同的状态,如果用"0’表示“正”,用"1"表示“负",这样符号也被数字化了,并且规定将它放在有效数字的前面,即组成了有符号数。所以,在二进制中使用最高位(第一位)来表示符号,最高位是0,表示正数,最高位是1,表示负数。

10000000 00000000 00000000 01111100
 
对于有符号数而言的性质:
⑴ 二进制的最高位是符号位:0表示正数,1表示负数
(2) 正数的原码、反码、补码都一样
(3) 负数的反码=它的原码符号位不变,其他位取反(0→1 ;1→0 )
(4) 负数的补码=它的反码+1
(5) 0的反码、补码都是0
(6) 在计算机运算的时候,都是以补码的方式来运算的
有符号数运算案列
正数相加
1.正数相加:
例如:1+1,在计算机运算如下
1的原码为:00000000 00000000 00000000 00000001
         反码:00000000 00000000 00000000 00000001
         补码:00000000 00000000 00000000 00000001
两数的补码相加:00000000 00000000 00000000 00000010(转为10进制)=2
整数相减
2.整数相减:
例如:1-2,在计算机中运算如下:
在计算机中减运算其实是作为加运算来操作的,所以,1-2=1+(-2)
第一步:获取1的补码 00000000 00000000 00000000 00000001
第二步:获取-2的补码
        -2的原码:10000000 00000000 00000000 00000010
        -2的反码:11111111 11111111 11111111 11111101
        -2的补码:11111111 11111111 11111111 11111110
第三步:1的补码与-2的补码相加:
        00000000 00000000 00000000 00000001
   +11111111 11111111 11111111 11111110
   =11111111 11111111 11111111 11111111
第四步:将计算结果的补码转换为原码,反其道而行之即可(如果想将二进制转换为十进制,必须得到二进制的原码)
        补码:11111111 11111111 11111111 11111111
        反码:11111111 11111111 11111111 11111110(负数的补码=它的反码+1)
        原码:10000000 00000000 00000000 00000001(负数的反码=它的原码符号位不变,其他位取反(0→1 ;1→0)
        第五步:将计算结果的二进制原码转换为十进制
        二进制源码:10000000 00000000 00000000 00000001 = -1

 无符号数

无符号数是针对二进制来讲的,无符号数的表数范围是非负数。全部二进制均代表数值(所有位都用于表示数的大小),没有符号位。即第一个"0"或"1"不表示正负。
10000000 00000000 00000000 01111100
比如说我们 java 中 char 它就算是一个无符号数,它占16位,而我们的无符号数 是不能进行运算的。

<< 左移运算符

左移一位
 
posted @ 2022-03-29 10:30  linzepeng  阅读(236)  评论(0编辑  收藏  举报