当前位置: 首页 > news >正文

Java 源码、反码、补码 位运算

文章目录

  • 1. 源码、反码、补码
    • 1.1 原码
    • 1.2 反码
    • 1.3 补码
    • 1.4 byte的最大值
    • 1.5 byte的最小值
  • 2. 位运算
    • 2.1 & 与
    • 2.2 | 或
    • 2.3 ~ 非
    • 2.4 ^ 异或
    • 2.5 << 左移 (没有无符号左移)
    • 2.6 >> 右移 (有符号右移)
    • 2.7 >>> 无符号右移

1. 源码、反码、补码

1.1 原码

就是二进制定点表示法,即最高位为符号位:“0”表示正,“1”表示负,其余位表示数值的大小。
该数字不进行其他操作时数字最原始的二进制表示, 对于原码来说,绝对值相等的正数和负数只有符号位不同。

1.2 反码

正数的反码与其原码相同;
负数的反码是对其原码逐位取反,但符号位除外。(只需要将原码除符号位以外的位数取反,即0改为1,1改为0)

1.3 补码

正数的补码与其原码相同;
负数的补码是在其反码的末位加1;
现在的计算机都用补码存储整形数值。

计算机为什么有反码和补码?
有人会有疑惑为什么要用反码,补码,不直接用原码呢?
先搞清楚一点反码、补码、原码是针对二进制数而言,计算机若用原码相加减,正数加正数不会出错,然而正数和负数原码相加就会出错。说白了,补码、反码就是为了简化减法而来的,将减号化为负数后再将负数化为补码求加法,就跟正数没关系了!
不管是正整数还是正小数,原码,反码,补码都全部相同。计算机中所有数都是以补码形式存储的。
1.10+(1)时:1010 + 0001 = 1011,即11。
2.10+(-1)时:00001010 + 10000001 = 10001011 ,即 -11 (原码参与加法运算)
3.10+(-1)时:00001010 + 11111111 = 00001001,即 9 (补码参与加法运算)

1.4 byte的最大值

八位二进制中正数最大是0111 1111(第一位是符号位),所以byte正数范围是(0-127),共有2^7=128个数值;

1.5 byte的最小值

八位二进制中负数计算需要用反码末位+1得到补码,所以1111 1111补码就是1000 0001=-1,一直到1000 0001补码是1111 1111= -127,而1000 0000的补码是1000 0000也就是-0,没有意义,此处计算机将它计为-128,故一个字节的取值范围是[-128,127]。

2. 位运算

2.1 & 与

两个位都为1时,结果才为1

2.2 | 或

两个位都为0时,结果才为0;
或者表述为,有一个是1,结果就是1,否则是0。

2.3 ~ 非

0变1,1变0

2.4 ^ 异或

相同为0,不同为1

2.5 << 左移 (没有无符号左移)

符号位不变,正数负数都是低位用0补齐,不管对于正数还是负数,都相当于乘以2^n

2.6 >> 右移 (有符号右移)

高位正数用用0补,负数用1补

2.7 >>> 无符号右移

正数负数高位都用0补(会导致负数变成正数)

http://www.lryc.cn/news/261005.html

相关文章:

  • 时序分解 | Matlab实现NGO-ICEEMDAN基于北方苍鹰算法优化ICEEMDAN时间序列信号分解
  • Linux Conda 安装 Jupyter
  • 金融众筹系统源码:适合创业孵化机构 附带完整的搭建教程
  • OpenCV imencode 函数详解与应用示例
  • 持续集成交付CICD:Jenkins使用CD流水线下载Nexus制品
  • 【C++】输入输出流 ⑩ ( 文件流 | 文件流打开方式参数 | 文件指针 | 组合打开方式 | 文件打开失败 )
  • React中的setState执行机制
  • LabVIEW实时建模检测癌细胞的异常
  • Python卡尔曼滤波器OpenCV跟踪和预测物体的轨迹
  • LeetCode Hot100 25.K个一组翻转链表
  • 中职网络安全应急响应—Server2228
  • springboot 获取路径
  • C#上位机与欧姆龙PLC的通信01----项目背景
  • SE考研真题总结(二)
  • vue中预览pdf的方法
  • 详谈前端中常用的加/密算法
  • 宣布全面推出适用于 macOS 的 Amazon EC2 M2 Pro Mac 实例
  • 【记录版】SpringBoot下Filter注册源码解读
  • WPF的WebBrowser控件
  • WX小程序案例(一):弹幕列表
  • 基于ssm医用物理学实验考核系统论文
  • 鸿蒙HarmonyOS4.0 入门与实战
  • 论文阅读——GroupViT
  • 时光机器:用rrweb打造可回溯的用户体验!
  • 不同的葡萄品种的葡萄酒有什么共同特质?
  • Visual Studio编辑器中C4996 ‘scanf‘: This function or variable may be unsafe.问题解决方案
  • C与C++编程语言的区别和联系
  • UE4 UMG 颜色字体和PS对应关系
  • EasyExcel处理表头的缓存设置
  • 数据挖掘任务一般流程