原码、反码、补码、位运算理解

引言

最近在针对java的基础进行回顾复习,复习过程中发现对于原码、反码、补码、位运算不太了解,故做笔记如下

原码、反码、补码

这里对其简单进行解释,基本够用

  1. 二进制的最高位是符号位:0表示正数,1表示负数
  2. 正数的原码、反码、补码都一样
  3. 负数的反码 = 它的源码符号位不变,其他位取反(0 ->1 , 1 -> 0)
  4. 负数的补码 = 它的反码 + 1,负数的反码 = 负数的补码 - 1
  5. 0的反码、补码都是0
  6. java中没有无符号数
  7. 在计算机运算的时候都是以补码的方式来运算
  8. 当我们看运算结果的时候,要看他的原码

位运算

七个位运算符(&、|、^、~、>>、<<、>>>)

  • **按位与&:**两位全是1,结果位1,否则为0

  • **按位或|:**两位有一个为1,结果为1,否则为0

  • **按位异或^:**两位一个为0,一个为1,结果为1,否则为0

  • **按位取反~:**0 -> 1,1 -> 0

示例:

在运算时,先将数字转为原码,再转为补码然后使用补码进行运算,将运算后的补码再转为原码即为结果(注意:负数和正数在转换时的方式不一致)

依据补码进行运算,在转换为原码

//2&3=1.2的原码:00000000 00000000 00000000 00000010
	2的补码:00000000 00000000 00000000 00000010
2.3的原码:00000000 00000000 00000000 00000011
	3的补码:00000000 00000000 00000000 00000011
3.按位&
	00000000 00000000 00000000 00000010
	00000000 00000000 00000000 00000011
运算后的补码:00000000 00000000 00000000 00000010
运算后的原码:00000000 00000000 00000000 00000010
所以结果:2

//~-2=1.-2的原码:10000000 00000000 00000000 00000010
2.-2的反码:11111111 11111111 11111111 11111101
3.-2的补码:11111111 11111111 11111111 11111110
4.~-2运算后的补码:00000000 00000000 00000000 00000001
5.运算后的原码:00000000 00000000 00000000 00000001
所以结果:1

//~2=1.2的补码:00000000 00000000 00000000 00000010
2.~2运算后的补码:11111111 11111111 11111111 11111101
3.运算后的反码:11111111 11111111 11111111 11111100
4.运算后的原码:10000000 00000000 00000000 00000011
所以结果:-3

  • **算数右移 >>:**低位溢出,符号位不变,并用符号位补溢出的高位

    示例:1 >> 2

    **本质:**1 / 2 / 2 = 0

  • 算数左移 <<:符号位不变,低位补0

    **示例:**1 << 2

    **本质:**1 * 2 * 2 = 4

  • **逻辑右移 >>>(无符号右移):**低位溢出,高位补0

示例:

//1>>2
1的原码:00000000 00000000 00000000 00000001
1 >> 2:00000000 00000000 00000000 00000000 01
	相当于:00000000 00000000 00000000 00000000
	本质:1/2/2=0
所以结果:0

//1<<2
1的原码:00000000 00000000 00000000 00000001
1 << 2:00000000 00000000 00000000 00000100
	本质:1*2*2=4
所以结果:4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱学习的大雄

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值