D0006-进制,位运算,原反补码

十进制转其他进制

公式:除基取余,直到商为0,把余数反转拼接

十进制10转换二进制
			商	余数
	10/2	5	 0
    5/2		2	 1
    2/2		1	 0
    1/2		0	 1 
    把余数反转拼接:1010
....

原码反码和补码

原码:一个二进制数据,最高位符号位(0表示正数,1表示负数),后面的叫数值位
	符号位	   数值位
	0		 0000101	+5	
    1		 0000101	-5

正数:正数的原码、反码和补码都是一样

负数的反码:符号位不变,数值位取反
            符号位	   数值位
     原码	   1		0000101	
     反码	   1		1111010

负数的补码:在反码的基础上+1
            符号位	    数值位
     原码	   1		 0000101	
     反码	   1		 1111010
     补码	   1		 1111011
   
注意:计算机中所有的数据运算都是用【补码进行运算的】
	5+(-7)=-2
    
    5是正数,其原码、反码、补码都是一样的
    	00000101
    -7的原码、反码、补码、依次算出来
            符号位	  数值位
        原码	1      0000111
    	反码	1	   1111000
    	补码	1	   1111001
    
    5+(-7)的底层运算是用补码进行运算
    	00000101   5的补码
    +1	11111001   -7的补码
    --------------
        11111110   补码
    -1	00000001
    -------------------
        11111101   反码
    	10000010   原码	-2 

位运算

&(位与)  |(位或)  ^(位异或)  ~(取反)

运算规则:
   &(位与): 把需要运算的数据转换为二进制,每一位逐一进行位与运算
   			1&1=1;  1&0=0;  0&0=0;       //无0为1,有0为0
   |(位或): 把需要运算的数据转换为二进制,每一位逐一进行位或运算
   			1|1=1;  1|0=1;  0|0=0;       //有1为1,无1为0
   ^(位异或):把需要运算的数据转换为二进制,每一位逐一进行位异或运算
  			1^1=0; 0^0=0;  1^0=1; 0^1=1  //相同为1,不同为0
            
            特点:一个数被另一个数异或两次,等于这个数本身
                
   ~(取反): 把需要运算的数据转换为二进制,每一位01,10

<<(左移)  >>(右移)  >>>(无符号右移)
运算规则:
	<<(左移):在二进制数据的最右边补对应位数的0,左边符号位被丢弃
		相当于乘以2的几次幂		
		
	>>(右移):在最左边补对应位数的符号位,最后边的舍弃
		相当于除以2的几次幂,例如:数学计算中 15/4=3.75,但java中:int a=15;
                                                           int b=4;
                                                           int c=a/b; //其结果为3,舍弃小数位
		
	>>>(无符号右移):无论是正数还是负数,在最左边补对应位数的0

数据交换【重点】

两个数据交换,可以采用第三方变量。

int a=9;
int b=10;

//定义第三方变量
int temp=a;
a=b;
b=temp;

System.out.println("a:"+a);
System.out.println("b:"+b);   

还可以采用位异或的方式,利用一个数被另一个数异或两次,结果等于这个数本身的特点。

int a=9;
int b=10;
//采用异或的特点
a=a^b;	//a=9^10
b=a^b;  //b=9^10^10=9    这一步中相当于 b=(a^b)^b           等号右边的皆为原始 a,b 值
a=a^b;  //a=9^10^9=10    这一步中相当于 a=(a^b)^((a^b)^b)   等号右边的皆为原始 a,b 值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值