原码 反码 补码及应用

原码

什么是原码?

原码:十进制数据的二进制表现形式,最左边是符号位,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. 马斯克来了!瞄准1万亿美元电信市场,星链「村村通」在美获突破
  2. Nginx负载均衡配置实例详解(转)
  3. 数据结构和算法一定要背算法的代码嘛_我们为什么要学习数据结构和算法?
  4. Understanding Generative Adversarial Networks (GAN)
  5. Centos6 安装RabbitMq3.7.7
  6. 【笔记】8位流水线乘法器(Verilog)
  7. free C# Ebook (Amazing amount of ebooks available)
  8. 阿里云流水线主机离线启动
  9. ajax同步时,loading加载不显示(谷歌浏览器)
  10. struts 的radio标记的增强
  11. c语言如何算字节,C语言中结构字节的计算方法
  12. 招行首发芭比娃娃MP3
  13. 【c/c++】一直想写那个盗取别人手机号码的CODE
  14. 老师计算机组合照说说,有关老师的说说
  15. php获取域名去掉www,php获取域名_PHP 获取域名的几种方法
  16. html全屏飘雪花特效,html5 3D飘落雪花动画特效
  17. Android 仿微信刷新旋转小风车 自定义view
  18. c语言常用的专业术语对照,C语言术语对照表.doc
  19. 死磕算法第一弹——数组、集合与散列表
  20. 么在笔记本电脑桌面上添加备忘录?

热门文章

  1. 一款Flutter版新闻App
  2. ibatis报错:无效的列索引
  3. jQuery+Ajax+Axios
  4. 街篮先锋测试显示服务器,街篮手游先锋加点怎么加点 有什么技巧 先锋测试训练营加点攻略[图]...
  5. 安装VMware 和Ubuntu教程 以及ubuntu更新源
  6. Linux学习笔记:mkdir创建文件夹
  7. Flutter 加载图片方法
  8. charles+SwitchyOmega抓取https网站
  9. 每日前端签到(第121天)
  10. 深入理解 SSD over provisioning