【进制转换】原码反码和补码的理解以及进制转换

摘要:
根据绝对值大小转换的二进制数;根据绝对值的大小,二进制数被转换为二进制数。除了符号位,数字的原始代码是相反的。补码为:II。二进制数据的二进制表示是数据的补码。正数的反码和补码与原始码相同。将绝对值转换为二进制,负数的补码为:除了符号位之外,数字的原始码被反转,即求补码的方法(除了基数的反余数的方法)3.1.1正整数:计算正数的二进制表示,并且根据修改的原始码计算补码。四、 二进制到十进制4.1正整数:10001010-10负代码:
一、编码理解:

1、原码:

  • 正数:按照绝对值大小转换成的二进制数;
  • 负数:按照绝对值大小转换成的二进制数,然后最高位补1,称为原码。
00000000 00000000 00000000 00000101 是 5的 原码;
10000000 00000000 00000000 00000101 是 -5的 原码。

2、反码:

  • 正数:与原码相同;
  • 负数:该数的原码除符号位外各位取反。
正数00000000 00000000 00000000 00000101 的反码还是 00000000 00000000 00000000 00000101 ;
负数10000000 00000000 00000000 00000101每一位取反(除符号位),得11111111 11111111 11111111 11111010。
称:10000000 00000000 00000000 00000101 和 11111111 11111111 11111111 11111010互为反码。

3、补码:

  • 正数:与原码相同;
  • 负数:该数的原码除符号位外各位取反,然后在最后一位加1。
10000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。 
那么,补码为: 
11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011 
所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。转换为十六进制:0xFFFFFFFB。
二、二进制

数据的二进制表示即为数据的补码,也是计算机底层的存储方式。

  1. 正数的反码和补码都与原码相同。
  2. 负数的原码为:绝对值转换为二进制,然后最高位补1,称为原码;
  3. 负数的反码为:对该数的原码除符号位外各位取反。
  4. 负数的补码为:对该数的原码除符号位外各位取反,然后在最后一位加1。
三、十进制转二进制

3.1 整数:即求补码的方法(除基倒取余法)

3.1.1 正整数:

  1. 输入一个十进制数n;
  2. 每次用n除以2;
  3. 把余数记下来,再用商去除以2...
  4. 依次循环,直到商为0结束;
  5. 把余数倒着依次排列,就构成了转换后的二进制数。

3.1.2 负整数:

  1. 先取绝对值得到正数;
  2. 求出该正数的二进制表示,方法参考上面;
  3. 对上一步的结果最高位补1,得到该负整数的原码;
  4. 根据改原码求补码,即为二进制;(除符号位外各位取反,然后在最后一位加1。)

3.2 小数:(不分正负)

3.2.1 方法:乘2取整,顺序排列

3.2.2 具体步骤

  1. 用2乘十进制小数,可以得到积;
  2. 将积的整数部分取出,再用2乘余下的小数部分,又得到一个积;
  3. 再将积的整数部分取出,如此进行,不断重复2;
  4. 直到积中的小数部分为零或者达到所要求的精度为止。
四、二进制转十进制

4.1 正整数:(最高位为符号位)

例:

二进制正数:0000 1010 (十进制为10)
转换为十进制数: 1*2^3+0*2^2+1*2^1+0*2^0=10

4.2 负整数:(最高位为符号位)

+10的原码:0000 1010
-10的原码:1000 1010
-10的反码:1111 0101
-10的补码:1111 0110
最终。-10的二进制:1111 0110 (十进制为-10)
转换为十进制数: 
 1*2^6-1*2^5-1*2^4-0*2^3-1*2^2-1*2^1-0*2^0
=2^4-2^2-2^1=16-4-2=10(前面加一个负号,即为-10)

注意:

  1. 最高位为符号位,不做计算;
  2. 计算时,从左往右,从2^0开始。所以8位有符号二进制,符号位后的第一位对应的是2^6,而不是2^7

4.3 小数:

二进制:0000 1010.1100
转换为十进制:
小数点前+小数点后
= (1*2^3+0*2^2+1*2^1+0*2^0)+(1*2^(-1)+1*2^(-2)+0*2^(-3)+0*2^(-4))
=10+0.75
=10.75
五、参考:
  1. 负数与二进制换转方法 - 益达先生的个人空间 - 开源中国 https://my.oschina.net/lolsi/blog/269154
    注:主要是对原码、反码、补码的介绍。

免责声明:文章转载自《【进制转换】原码反码和补码的理解以及进制转换》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇asp.net web core 部署问题汇总linux下挂载NTFS分区错误修复下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

fso操作大全

FSO操作大全2007-03-19 16:50如何删除一个文件 [JScript] function DeleteFile(filespec) { var fso; fso = new ActiveXObject("Scripting.FileSystemObject"); fso.DeleteFile(filespec); } [VBSc...

js使用toFixed遇到的问题以及由此引发的小数精度问题

原文链接: https://www.cnblogs.com/yalong/p/15762637.html 项目中使用 toFixed 出现的问题: 一. js报错 Uncaught SyntaxError: Invalid or unexpected token 如下图所示: 就是说对 整数 和 字符串 使用toFixed() 会报错 二. 四舍五入不...

c语言运算符

1.运算符概述 运算符是一种编译器执行特定的数学或逻辑操作的符号。C语言提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 条件运算符 其他运算符 2.算术运算符 算术运算符分为单目运算符和双目运算符,单目运算符表示只需要一个操作数,双目运算符需要两个操作数。 2.1 双目算术运算符 1)+ :加法,把两个操作数相加...

DataTable排序,检索,合并,筛选

http://apps.hi.baidu.com/share/detail/16252525 DataTable排序,检索,合并,筛选 DataTable排序,检索,合并详解 一、排序1 获取DataTable的默认视图2 对视图设置排序表达式3 用排序后的视图导出的新DataTable替换就DataTable(Asc升序可省略,多列排序用","隔...

Android studio的一些常用快捷键

Alt+回车 导入包,自动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L 格式化代码 Ctrl+Alt+O 优化导入的类和包 Alt+Insert 生成代码(如get,set方法,构造函数等) Ctrl+E或者Alt+Shift+C 最近更改的代码 Ctrl+R 替换文本 Ctrl+F 查找文本 Ctrl+Shift+...

Groovy 学习手册(3)

五. Groovy 的设计模式 设计模式是一种非常好的方式,可以使你的代码变得实用,可读又具有扩展性。跟 Java 相比,在 Groovy 里使用设计模式使代码更加简洁和容易。 1. 策略模式 设想一下,下面有三个不同方法用来计算数字相加的总和: def totalPricesLessThan10(prices) { int tota...