原码 反码 补码及应用

原码

什么是原码?

原码:十进制数据的二进制表现形式,最左边是符号位,0为正,1为负。

56 ==> 0 0111000

​ 符号位 数据

最大值:01111111 ==> 127

最小值:11111111 ==> -127

原码的数值计算

00000001 ==> 1

00000010 ==> 2

利用原码对正数计算是不会有问题的。

原码的弊端

10000000 ==> 0

我们对0 + 1,0+1=1

但1000000 + 1 为10000001 ,而10000001 ==> -1

在对负数进行运算时出现了错误,实际运算结果与预期结果是相反的。此时我们引入反码

反码

什么是反码

反码:正数的反码是其本身,负数的反码是符号位保持不变,其余位取反。

数值计算

计算规则:正数的反码不变,负数的反码在原码的基础上,符号位不变,数值取反,0变1,1变0。

-56 ==> 10111000 (原码)

​ 11000111 (反码)

-56 + 1 = -55

-55 ==> 11001000 (反码)

-55 <== 10110111 (原码)

反码的弊端

负数运算时,如果不跨0,没有任何问题,如果跨0,就会与实际结果有1的偏差

-4+4 = 0

-4 ==> 10000100(原码) 11111011(反码)

+4 = 11111111 (反码)== > 10000000 (正码)==> -0

-4+5 = 1

-4 ==> 10000100(原码) 11111011(反码)

+5 = 00000000 (反码)== > 00000000 (正码)==> +0

所以引入补码

补码

什么是补码

补码:正数的补码是其本身,负数的补码是在其反码的基础上+1。

十进制数字 原码 反码 补码
+0 00000000 00000000 00000000
-0 10000000 11111111 00000000
-1 10000001 11111110 11111111
-2 10000010 11111101 11111110
-3 10000011 11111100 11111101
-4 10000100 11111011 11111100
-127 11111111 10000000 11111111
-128 10000000

补码出现的目的

为了解决负数计算时跨0的问题而出现的。

计算规则

正数的补码不变,负数的补码在反码的基础上+1

另外补码还能多记录一个特殊的值-128,该数据在一个字节下,没有反码和原码、

补码注意的点

计算机中的存储和计算都是以补码的形式进行的。

应用

强制转换

public class Test{public static void main(Strinf[] args){int a = 300;// 00000000 00000000 00000001 00101100byte b = (byte)a;System.out.println(b);// 00101100 ==> 44}
}

00101100 (原码)== > 00101100(反码)> 00101100(补码)> 44

public class Test{public static void main(Strinf[] args){int a = 200;// 00000000 00000000 00000000 11001000byte b = (byte)a;System.out.println(b);// 11001000 ==> -56}
}

11001000(原码)== > 10110111(反码)== > 10111000(补码)==> -56

其他运算符

运算符 含义 运算规则
& 逻辑与 0为false,1为true
| 逻辑或 0为false,1为true
<< 左移 向左移动,低位补0
>> 右移 向右移动,高位补0或1
>>> 无符号左移 向右移动,高位补0

&:逻辑与

public class Test{public static void main(Strinf[] args){int a = 200;// 00000000 00000000 00000000 11001000int b = 10; // 00000000 00000000 00000000 00001010System.out.println(a & b);}
}

​ 00000000 00000000 00000000 11001000

& 00000000 00000000 00000000 00001010


​ 00000000 00000000 00000000 00001000 ==> 8

|:逻辑或

public class Test{public static void main(Strinf[] args){int a = 200;// 00000000 00000000 00000000 11001000int b = 10; // 00000000 00000000 00000000 00001010System.out.println(a & b);}
}

​ 00000000 00000000 00000000 11001000

| 00000000 00000000 00000000 00001010


​ 00000000 00000000 00000000 11001010 ==> 202

<<:左移

public class Test{public static void main(Strinf[] args){int a = 200;// 00000000 00000000 00000000 11001000System.out.println(a << 2);//800}
}

>>:右移

public class Test{public static void main(Strinf[] args){int a = 200;// 00000000 00000000 00000000 11001000System.out.println(a >> 2);// 50}
}

原码 反码 补码及应用相关推荐

  1. 关于计算机中 原码, 反码, 补码 详解

    本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...

  2. 原码, 反码, 补码, 移码 详解

    本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...

  3. 关于 原码 反码 补码 位运算

    二进制 原码:最高位为符号位,0为正  1为负 正数的原码 反码 补码 都是相同的 反码:负数的反码为原码符号位不变 其它对应变化(1变0 0变1) 补码:等于 反码+1 3^-3 =? 运算过程 - ...

  4. 10.原码 反码 补码

    +7的原码:0000 0111 -7的原码:1000 0111   第一位0代表正数,1代表负数,第一位为符号位 +7的反码:0000 0111 正数反码和原码一样 -7的反码:1111 1000   ...

  5. java进制原码_Java 一一 进制、原码 反码 补码、移位操作

    进制 二进制 和 十进制 相互转换 十进制 和 十六进制 相互转换 原码,反码,补码 原码.反码.补码: 在计算机内, 有符号数有三种表示法: 原码, 反码, 补码. 所有的数据的运算都是采用 补码 ...

  6. 大端 小端 原码 反码 补码 及内存中的表现

    小端 和 大端 在内存中存储时,都是从内存的低地址往高地址存,即0x00000000 -> 0xffffffff 以汉字 "严"为例,Unicode码是4E25,需要两个字节 ...

  7. 原码 反码 补码 详解

    一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放 ...

  8. python二进制反码例题_python中的进制转换和原码,反码,补码

    python中的进制转换和原码,反码,补码 计算机文件大小单位 b = bit 位(比特) B = Byte 字节 1Byte = 8 bit #一个字节等于8位 可以简写成 1B = 8b 1KB ...

  9. 原码 反码 补码 详解

    本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...

  10. 【原码, 反码, 补码的基础概念和计算方法】

    数值在计算机中是以补码的方式存储的,在探求为何计算机要使用补码之前, 让我们先了解原码, 反码和补码的概念. 原码就是符号位加上数字的二进制表示, 即用第一位表示符号, 其余位表示值. 反码的表示方法 ...

最新文章

  1. LeetCode简单题之K 进制表示下的各位数字总和
  2. Linux防火墙与iptables命令
  3. 事业单位招 计算机面试实践技能操作,2019山东事业单位卫生类招聘面试实践技能概论...
  4. 非对称加密算法RSA--转
  5. 利用gcc的__attribute__编译属性section子项构建初始化函数表【转】
  6. 史上最走心的Webpack4.0中级教程——配置之外你应该知道事
  7. 【人脸识别】基于matlab GUI Haar分类器五官定位【含Matlab源码 686期】
  8. dnf 跨服 服务器 位置,dnf跨区怎么跨_dnf国服跨区表_快吧游戏
  9. 真的来了!IO-Link无线-释放传感器/执行器巨大潜力的工业无线解决方案,设备远程监控新选择!(Part 3)
  10. 华为(BGP路由技术)
  11. 保密单位 计算机维修保密协议,计算机维修保密协议.doc
  12. 前端框架是什么意思?
  13. Powershell 操作Excel的基本命令
  14. 博客系统 - 系统简介与首页设计
  15. 反向迭代器和正向迭代器
  16. 中职教资证计算机应用,中职计算机教师资格证只能教中职学校的吗
  17. Socket 系统调用深入研究(TCP协议的整个通信过程)
  18. 一文读懂数字孪生的应用及意义
  19. aw2013驱动分析
  20. for循环和while循环哪个效率更高

热门文章

  1. 虚拟机(虚拟机 +系统镜像)资源
  2. C动态裤soname查看及修改
  3. 深入解读GoogLeNet网络结构(附代码实现)
  4. java接口中的抽象方法_Java中的接口与抽象方法
  5. 英语六级的三大经典句型
  6. java获取项目根路径通用方法
  7. 职称计算机考试s符号,2017年职称计算机考试Word考点:项目符号和编号
  8. [Android]开机自启动脚本和selinux权限配置
  9. 《雍正皇帝》文化专有词泰译研究(研究综述)
  10. 怎样去掉桌面图标阴影(文字背景透明)