Java 一一 进制、原码 反码 补码、移位操作

一、进制


1. 二进制 和 十进制 相互转换


2. 十进制 和 十六进制 相互转换


二、原码,反码,补码

原码、反码、补码:
在计算机内, 有符号数有三种表示法: 原码, 反码, 补码. 所有的数据的运算都是采用 补码 进行的. 
注意: 正数 的原码, 反码, 补码都行相同. 负数稍微复杂

原码: 
	就是二进制定点表示,最高位为符号位,”0”表示正,”1”表示负.
反码:
	负数的反码是对其原码逐位取反,但符号位除外( 符号位 就是 最高位 ).
补码:
	负数的补码是在其反码的末尾 加 1.

注意:
	求反码的时候, 最高位是符号位不能改变
	正数的符号位 是 0
	负数的符号位 是 1

eg:

正数 5:

5的二进制数: 00000101

原码,补码,反码: 00000101


负数 -5;

5的二进制数: 00000101

原码: 10000101

反码: 111111010

补码: 111111011


三、移位操作

移位操作:
<<: 将操作数的二进制码整体左移指定位数, 左移之后的空 用 “0” 来补充
>>: 将操作数的二进制码整体右移指定位数, 右移之后的空 用 “符号位” 来补充
若是 正数 使用 “0” 补充
若是 负数 使用 ”1” 补充 
/*
* 2的二进制: 
* 00000000_00000000_00000000_00000010
* 左移3位:
* 00000_00000000_00000000_00000010000	//转十进制: 0 * 2^0 + ...+ 1 * 2^4 = 16
* 右移3位
* 00000000_00000000_00000000_00000010	//转十进制: 1 * 2^1 = 2
*/System.out.println(2 << 3); // 16
		
  System.out.println(16 >> 3); // 2
		
/*
* - 16 二进制数 最高位用 1 来补充(负数最高位 用 1)
* 原码: 10000_00000000_00000000_00000010000
* 反码: 11111_11111111_11111111_11111101111	//负数的反码 最高位 不变
* 补码: 11111_11111111_11111111_11111110000	//负数的补码 是在其反码的末尾加 1
* 右移3位(在补码的基础上 右移3位. 右移之后的空 用 “符号位” 来补充.)
*      11111111_11111111_11111111_11111110
*/
System.out.println(-16 >> 3); // -2


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

white camel

感谢支持~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值