首页 > 编程语言 >Java位运算符

Java位运算符

时间:2023-04-17 10:23:58浏览次数:41  
标签:Java 0010 33 44 补码 运算符 反码 原码

前置知识

  1. 原码、反码、补码
    - 原码:第一位表示符号,其余位表示值。如 2原码:0000 0010;-2原码:1000 0010
    - 反码:正数的反码是原码本身,负数的反码在原码基础上,符号位不变,其他位取反。如:2反码:0000 0010;-2反码:1111 1101
    - 补码:正数的反码是原码本身,负数的补码在原码基础上,符号位不变,其他位取反,最后位+1。如:2补码:0000 0010;-2补码:1111 1110
  2. 计算机中的数字是通过二进制编码的方式进行存储,而负数使用补码表示法进行存储,进行位运算时先运算补码,再转为十进制输出。

说明

  • 概述:位运算符,用来操作变量的二进制位,分为按位运算符& | ^ ~移位运算符 << >> >>>
    • 按位运算符:对二进制位执行布尔代数计算。包含:按位且AND(&)、按位或OR(|)、按位异或XOR(^)、按位非NOT(~)
      • &:两个输入位都是1,则为1,否则为0;
      • |:两个输入位都是0,则为0,否则为1;
      • ^:两个输入位相同为0,不同为1;
        • 特点:交换律A^B^C=A^C^B,结合律A^B^C=A^(B^C),自反性A^0=A,A^A=0
        • 应用场景:1.在不引入第三个变量的情况下,转换两个变量的值;2.找出唯一一个成对的数;3.找出唯一一个落单的数
      • ~:输入位0改为1,1改为0。
    • 移位运算符:对二进制位向左向右移动。包含:左移位(<<)、有符号右移位(>>)、无符号右移位(>>>)
      • <<:将二进制数位整体向左移动N位(低位补0)左移一位相当于乘以2,负数左移等于正数左移乘以-1
      • >>:将二进制数位整体向右移动N位(正数高位补0,负数高位补1)右移一位相当于除以2
      • >>>:将二进制数位整体向右移动N位(正负都高位补0)

示例

  1. 正数(正数的补码等于本身,直接计算即可)
    33&44
        33原码:0010 0001
        44原码:0010 1100 =》0010 0000 =》32
    33|44
        33原码:0010 0001
        44原码:0010 1100 =》0010 1101 =》45
    33^44
        33原码:0010 0001
        44原码:0010 1100 =》0000 1101 =》13
    ~33
        33原码:0010 0001
        33反码:0010 0001
        33补码:0010 0001
        ~33补码:1101 1110
        ~33反码:1101 1101
        ~33原码:1010 0010 =》-34
    33<<2
        33原码:00000000 00100001 =》00000000 10000100(低位补0) =》132
    33>>2
        33原码:00000000 00100001 =》0(00)00000 00001000(有符号高位补0) =》8
    33>>>2
        33原码:00000000 00100001 =》(00)000000 00001000(无符号高位补0) =》8
    
  2. 负数(负数需要先计算补码,再进行位运算)
    -33&44
        -33原码:1010 0001
        -33反码:1101 1110
        -33补码:1101 1111
        44补码:0010 1100 《= 44原码:0010 1100
    =》 -33&44补码:0000 1100(首位为0表示正数,补码=反码=原码)
        -33&44反码:0000 1100
        -33&44原码:0000 1100 =》12
    -33|44
        -33原码:1010 0001
        -33反码:1101 1110
        -33补码:1101 1111
        44补码:0010 1100 《= 44原码:0010 1100
    =》 -33&44补码:1111 1111
        -33&44反码:1111 1110
        -33&44原码:1000 0001 =》-1
    -33^44
        -33原码:1010 0001
        -33反码:1101 1110
        -33补码:1101 1111
        44补码:0010 1100 《= 44原码:0010 1100
    =》 -33^44补码:1111 0011
        -33^44反码:1111 0010
        -33^44原码:1000 1101 =》-13
    ~ -33
        -33原码:1010 0001
        -33反码:1101 1110
        -33补码:1101 1111
    =》 ~-33补码:0010 0000
        ~-33反码:0010 0000
        ~-33原码:0010 0000 =》32
    -33<<2
        -33原码:10000000 00100001
        -33反码:11111111 11011110
        -33补码:11111111 11011111
        左二补码:11111111 011111(00)(左移低位补0)
        左二反码:11111111 01111011
        左二原码:10000000 10000100 =》-132(其实就是 正数移位后*-1)
    -33>>2
        -33原码:10000000 00100001
        -33反码:11111111 11011110
        -33补码:11111111 11011111
        右二补码:1(11)11111 11110111(有符号右移负数高位补1)
        右二反码:11111111 11110110
        右二原码:10000000 00001001 =》-9
    -33>>>2
        -33原码:10000000 00000000 00000000 00100001
        -33反码:11111111 11111111 11111111 11011110
        -33补码:11111111 11111111 11111111 11011111
        右二补码:(00)111111 11111111 11111111 11110111(无符号右移高位补0)
        右二反码:00111111 11111111 11111111 11110111
        右二原码:00111111 11111111 11111111 11110111 =》1073741815
    

标签:Java,0010,33,44,补码,运算符,反码,原码
From: https://www.cnblogs.com/alan1995/p/17324940.html

相关文章

  • 六大JavaScript使用小技巧
    之前写过一些关于编程的小技巧,今天已久写一些JS中用到的小技巧,非常实用,如果熟悉了实用起来相当快捷方便。1.类型强制转换1.1string强制转换为数字可以用*1来转化为数字(实际上是调用.valueOf方法)然后使用Number.isNaN来判断是否为NaN,或者使用a!==a来判断是否为NaN,因为......
  • (之前的项目复习)我的Java项目实战--校园餐饮商户外卖系统07(优化)
    开发笔记七缓存优化问题说明用户数量多,系统访问量大频繁访问数据库,系统性能下降,用户体验差环境搭建maven坐标在项目的pom.xm1文件中导入springdataredis的maven坐标:点击查看代码<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-s......
  • Java Web应用设计中验证码的生成和应用方法
    在JavaWeb应用设计中验证码的设计是一个必不可少的环节,由于验证码技术具有随机性较强、简单的特点,能够在一定程度上阻止网络上的恶意访问,在互联网领域得到了广泛的应用,如防止破解密码、刷票、论坛灌水、刷页、注册等恶意操作。百度上对验证码的定义是:(CAPTCHA)“CompletelyAut......
  • 逍遥自在学C语言 | 位运算符>>的高级用法
    前言在上一篇文章中,我们介绍了<<运算符的高级用法,本篇文章,我们将介绍>>运算符的一些高级用法。一、人物简介第一位闪亮登场,有请今后会一直教我们C语言的老师——自在。第二位上场的是和我们一起学习的小白程序猿——逍遥。二、优化除法运算除法运算需要比位移......
  • Java语言的基本元素:类和对象
    引入人认识世界,其实就是面向对象的。比如,我们认识一下美人鱼(都没见过)经过“仔细学习”,发现美人鱼通常具备一些特征:女孩有鱼尾美丽这个总结的过程,其实是抽象化的过程。抽象出来的美人鱼的特征,可以归纳为一个美人鱼类。而图片中的都是这个类呈现出来的具体的对象。类和对......
  • C语言中,取反运算符~a=-(a+1)的原因
    1、因为计算机直接拿读取到的数据去运算付出的代价是最小的,所以计算机存储的数据的形式应该满足读取后不必经过任何加工就能直接用来运算由于原码不经加工无法实现(+a)+(-a)=0,所以不满足该要求,为了满足(+a)+(-a)=0的要求,人们设计出了补码来满足该要求因而计算机中存储数据的形式......
  • 原始java写的模拟HTTP请求 HttpsMethod
    原始java写的模拟HTTP请求packagecom.fc.utility;importjava.awt.image.BufferedImage;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.ByteArrayOutputStream;importjava.io.DataInputStream;importjava.io.DataOutputStream;importja......
  • 运算符、表达式和语句
    运算符、表达式和语句关键字--->while、typedef运算符--->=、-、*、/、%、++、--复合语句、自动类型转换、强制类型转换编写带有参数的函数while循环示例代码:#include<stdio.h>#defineADJUST7.31intmain(void){constdoubleSCALE=0.333;dou......
  • java 八股文
    目录一、Java基础篇1.接口和抽象类的区别2.重载和重写的区别3.==和equals的区别4.异常处理机制5.HashMap原理6.想要线程安全的HashMap怎么办?7.ConcurrentHashMap原如何保证的线程安全?8.HashTable与HashMap的区别9.ArrayList和LinkedList的区别10.如何保证ArrayList的线......
  • ES的Java API 操作(五)
    我看到希望,哪怕只有微小的一束光,我也会拼尽全力去寻找.上一章简单介绍了ES聚合查询(四),如果没有看过,请观看上一章我们之前都是使用Postman请求来操作索引,操作文档,查询数据的,这一章节,老蝴蝶使用JavaApi进行处理.一.简单的JavaAPIES环境搭建一.一添加pom.xml依赖......