二进制运算
补码:
计算机中,数值都是以补码的形式存在的, 原码是被人脑识别的,补码是被机器存储的。要求得补码,首先要确定数据长度(几位数),首位表示符号位,1为负数,0为正数,后面所有位表示数值。
正数的补码是自己 负数的补码为,符号位后面的所有位取反,加1:
[1] => [00000001]原 => [00000001]补
[-5] => [10000101]原 => [11111010]反+[00000001] => [11111011]补
补码求原码:补码-1,取反
[00000001]补 => [00000001]原 == 1
[11111011]补 => [11111011]-1 => [11111011] + [11111111](-1补码) => [11111010]反 => [10000101]原 == -5
+0 -0 的补码还是自己
计算机中,只有加法,没有减法,减法会转为加负数运算,计算结果保留规定的位数,多余的数高位溢出。
如1-5在计算机中的运算方式(8位):
[1] == [00000001]原 == [00000001]补
[-5]==[10000101]原==[11111010]+[00000001]==[11111011]补
1-5 == [00000001]补 + [11111011]补
== [11111100]补
== [11111100] -1 (负数原码=补码-1,再取反)
== [11111100]+[11111111]==[11111011]
==[10000100]
==-4
补码的好处:方便计算机进行运算,计算机只能进行相加的运算,把数据都按补码存储后,符号位也会参与计算。
左移,右移:
逻辑左移、算术左移:右边补0逻辑右移:左边补0
算术右移:首位为1,补1,否则补0
与、或、非、异或:
与:&& 如: A、B都为非0,A&B==true 否则A&B==false或:|| 如:A、B有一个为非0,A||B==true,否则A||B==false
非:! 如:A为非0,!A==false
异或:^ 如:A、B同为0或同为非0,A^B同==true,否则A^B同==false