java基础系列之二:位运算符

本文深入探讨了计算机中数据的二进制表示方法、原码、反码、补码的概念及位运算符、移位运算符的应用。同时介绍了如何通过补码进行数值转换和负数表示,并详细阐述了四种位运算符的功能。最后,文章概述了移位运算符的使用场景和效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、计算机中数据的表示方法
  计算机是一种电子设备,有复杂的电子元器件组合而成,一个电子元器件有带点和不带点两种状态,通常我们将带点状态表示为数值1,不带点状态表示为数值0,多个这样的元器件的组合可以表示更多状态,也就是可以表示更多的数据,如000表示0,001表示1,010表示2,011表示3。一个元器件可表示一位数据,这种表示数据的方式就叫二进制。在实际的电子设备中,我们将8个这样的元器件形成一个单元,这样的单元叫一个字节,一个字节能表示的数值范围是0-255。
  一个字节由8个二进位组成,其中最右边的一位称为“最低有效位”或“最低位”,最左边的一位称为“最高有效位”或“最高位”。没一个二进位的值是0或1。
  二进制计数的缺点:书写太长,容易出错,一般计算机中的数据位数都是4的整数倍,所以,在计算机里通常采用16进制计数法。用数字可以表示各种信息,计算机里只有数值,当你在内存中看到一个数值时,这个数值可能代表各种意义。

2、原码、反码和补码
  1>原码:
  将最高位作为符号位(以0代表正,1代表负),其余各位代表数值本身的绝对值(以二进制表示)。例如:
  +7的原码为:00000111
  -7的原码为:10000111
  问题:
  +0的原码为:00000000
  -0的原码为:10000000
  由于0的表示不唯一,所以计算机中数值没有采用原码表示形式。
  2>反码:
  一个数如果为正,则它的反码与原码相同,一个数如果为负,则符号位为1,其余各位是对原码取反。例如:
  +7的反码为:00000111
  -7的反码为:11111000
  问题:
  +0的反码为:00000000
  -0的反码为:11111111
  由于0的表示依然不唯一,所以计算机中数值没有采用反码表示形式。
  3>补码:
  利用溢出,可以将减法变为加法。
  对于十进制,如果从9得到5,可以用减法:
  9-4=5
  因为4+6=10,将6作为4的补数,将上式的减法改为加法:
  9+6=15
  去掉高位1(减去10),得到结果5。
  对于16进制,如果从C得到结果5,可以用减法:
  C-7=5
  因为7+9=16,将9作为7的补数,将上式的减法改为加法:
  C+9=15
   去掉高位1(减去16),得到结果5。
   在计算机中,如果我们用一个字节表示一个数,一个字节有8位,超过8位就进1,在内存中情况为:
   1 00000000
   进位1被丢弃。
   一个数如果为正,则它的原码、反码、补码相同;一个数如果为负,则符号位为1,其余各位是对原码取反,然后整个数加1。例如:
   +7的补码为:00000111
   -7的补码为:11111000
         +        1
         = 11111001
   +0的补码为:00000000
   -0的补码为:11111111
             +        1
             =100000000 进位1被丢弃
         = 00000000
   已知一个负数的补码,将其转换为十进制数,步骤:
   ①先对各位取反;
   ②将其转换为十进制数;
   ③加上负号,再减去1;
   例如:11111010,最高位为1,是负数,先将各位取反得00000101,转换为十进制数得5,加上负号得-5,再减1得-6。

3、位运算符
  为了方便对二进制位进行操作,java提供了四个二进制位操作符。
  & 按位与
  | 按位或
  ^ 按位异或
  ~ 按位取反
  1>按位与:只有壹壹为1。
  0&0=0
  0&1=0
  1&0=0
  1&1=1
  2>按位或:只有零零为0。
  0|0=0
  0|1=1
  1|0=1
  1|1=1
  3>按位异或:只有零壹或壹零为1。
  0^0=0
  0^1=1
  1^0=1
  1^1=0
  4>按位取反:
  对二进制数按位取反,即0变成1,1变成0。
 
4、移位运算符
  java中有三个移位运算符
  左移:<<
  带符号右移:>>
  无符号右移:>>>
  例如:
  数   x    x<<2    x>>2   x>>>2
  17 00010001 01000100 00000100 00000100
 -17 11101111 10111100 11111011 00111011

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值