java里的进制

二进制:计算机只能处理二进制数据,利用编程语言提供的算法支持了十进制;计算机的内部(Java)只有二进制数据,在显示的时候编程语言提供API将二进制转换为十进制显示出来;计算机表面上支持了十进制,但其实不支持。
Java中有两个方法:
Integer.toString() 将二进制数据转换为十进制输出
Integer.parseInt() 将十进制字符串转换为二进制数据

		int n=45;
		System.out.println(n);//45,其实对n做了Integer.toString(n)。如下
		System.out.println(Integer.toString(n));//"45"
		System.out.println(Integer.toBinaryString(n));//101101
		int i=0;
		System.out.println(Integer.toBinaryString(i++));//0
		System.out.println(Integer.toBinaryString(i++));//1
		System.out.println(Integer.toBinaryString(i++));//10
		System.out.println(Integer.toBinaryString(i++));//11
		System.out.println(Integer.toBinaryString(i++));//100

十六进制:用于简写2进制(缩写二进制),原因是因为二进制的书写过于冗长,二进制的每四位缩写为一个十六进制数,按照这个规则可以将二进制缩写;编程时候凡是需要书写二进制数据的时候,都采用十六进制作为缩写。

//十六进制用于缩写二进制
		int n=0xb5;//十六进制
		System.out.println(Integer.toBinaryString(n));//二进制 :10110101
		System.out.println(n);//十进制 :181
		
		
		int m=0x5fdddb12;
		System.out.println(Integer.toBinaryString(m));//1011111110111011101101100010010 高位自动省略
		System.out.println(m);//1608375058

补码:是一种利用“正数”表示“负数”的算法,节省了硬件成本。

		int n=-1;
		System.out.println(Integer.toBinaryString(n));//11111111111111111111111111111111
		System.out.println(Integer.toBinaryString(-2));//11111111111111111111111111111110
		System.out.println(0);//0
		
		for(int i=-10;i<10;i++){
			System.out.print(Integer.toString(i)+" ");
			System.out.println(Integer.toBinaryString(i));
		}
		int max=Integer.MAX_VALUE;
		int min=Integer.MIN_VALUE;
		
		System.out.println(Integer.toBinaryString(max));//1111111111111111111111111111111
		System.out.println(Integer.toBinaryString(min));//10000000000000000000000000000000
		System.out.println(min-max);//1
		System.out.println(max+1);//-2147483648
		System.out.println(min-1);//2147483647
		
		int n=8;
		int m=n+(max+1)*4;
		System.out.println(m);//8
		
		//补码的对称现象:-n=~n+1
		n=8;
		System.out.println(~n+1);//-8
		System.out.println(Integer.toBinaryString(n));//1000
		System.out.println(Integer.toBinaryString(~n));//11111111111111111111111111110111
		System.out.println(Integer.toBinaryString(~n+1));//11111111111111111111111111111000

二进制的运算符
1 ~取反
2.>>> >> <<移位运算
2.1) >>>逻辑右移位运算:将数字向右移动,高位补充0,低位溢出舍弃
n=01101101 00010001 11001001 10011011 m=n>>>1
m=001101101 00010001 11001001 1001101
2.2) <<逻辑左移位运算:将数字向左移动,低位补充0,高位溢出舍弃
2.3) >>>与>>
: >>> 向右移动,高位永远补0 ,负数时候不符合数学除法规律;
: >> 数位向右移动,高位为1(负数),则补1,高位为0(正数),则补0,保持符号位不变,其结果符合数学除法规律,自动向小方向取整
2.4)移位运算经典用途:与掩码运算配合,将数据进行拆分
3. & |与或运算
3.1) &与运算 逻辑乘法:1&1=1 0&1=0 1&0=0 0&0=0
计算规则:两个数上下对齐,对应位数进行与运算
d=01100011 00100110 00110111 11011110;
e=00000000 00000000 00000000 11111111
f=d&e;
f=00000000 00000000 00000000 11011110
经典用途:截取一个数据的后八位,称为掩码运算
3.2) |或运算:将数据进行合并
规则类似加法 1|1=1 0|1=1 1|0=1 0|0=0
计算规则:两个数上下对齐,对应位数进行或运算
b1=00000000 00000000 00000000 10011101
b2=00000000 00000000 00000000 01101111
b3=00000000 00000000 00000000 11101111
b4=00000000 00000000 00000000 00110011
n=(b1<<24)|(b2<<16)|(b3<<8)|b4
=10011101 00000000 00000000 00000000
00000000 01101111 00000000 00000000
00000000 00000000 11101111 00000000
00000000 00000000 00000000 00110011
=10011101 01101111 11101111 00110011

		int n=0x6d11c99b;
	//   >>>逻辑右移位运算
		int m1=n>>>1;
		int k1=n>>>2;
		System.out.println(Integer.toBinaryString(n));
		System.out.println(Integer.toBinaryString(m1));
		System.out.println(Integer.toBinaryString(k1));
		//   <<逻辑左移位运算
		int m2=n<<1;
		int k2=n<<2;
		System.out.println(Integer.toBinaryString(n));
		System.out.println(Integer.toBinaryString(m2));
		System.out.println(Integer.toBinaryString(k2));

		// >>>与>> 
		int a=-36;
		int b=a>>1;
		int c=a>>>1;
		System.out.print(a+" ");
		System.out.println(Integer.toBinaryString(a));
		System.out.print(b+" ");//b=-18
		System.out.println(Integer.toBinaryString(b));
		System.out.print(c+" ");
		System.out.println(Integer.toBinaryString(c));//??不符合数学规律
		
		//	&与运算
		//将int d拆分为4个八位数 f1 f2 f3 f4
		int d=0x632637de;
		int e=0xff;
		int f1=d&e;
		int f2=(d>>>8)&e;
		int f3=(d>>>16)&e;
		int f4=(d>>>24)&e;
		System.out.println(Integer.toBinaryString(d));//1100011 00100110 00110111 11011110
		System.out.println(Integer.toBinaryString(e));//11111111
		System.out.println(Integer.toBinaryString(f1));//11011110
		System.out.println(Integer.toBinaryString(f2));//110111
		System.out.println(Integer.toBinaryString(f3));//100110
		System.out.println(Integer.toBinaryString(f4));//1100011
		
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值