二补数 (2's complement)
二补数 (2's complement) :是一种用二进位表示有号数的方法,也是一种将数字的正负号变号的方式,常在计算机科学中使用。
一个数字的二补数就是将该数字作位元反向运算(即一补数),再将结果加 1,即为该数字的二补数。
在二补数系统中,一个负数就是用其对应正数的二补数来表示。
优点:二补数系统的最大优点是可以在加法或减法处理中,不需因为数字的正负而使用不同的计算方式。
只要一种加法电路就可以处理各种有号数加法,而且减法可以用一 个数加上另一个数的二补数来表示,因此只要有加法电路及二补数电路即可完成各种有号数加法及减法,在电路设计上相当方便。
特点:二补数系统的 0 只有一个表示方式,这点和一补数系统不同(在一补数系统中,0 有二种表示方式),因此在判断数字是否为 0 时,只较比对一个不同的条件即可。
具体算法:(转贴:原地址: http://entry.hit.edu.tw/~bd92046/new_page_1.htm)
二补数转换方法差异
方法1:
10進制轉2進制:
<1>直接將10進制轉為2進制,正負號省略。
<2>如果數目少於X bits,在左邊補0直到X bits。
<3>如果是正號,不需要其他動作。
如果是負號,使用1補數:將0變1,1變0;1補數加1,形成2補數。
例(1):將+6以16bit儲存,使用2補數。
+6 => 110 => 0000000000000110
例(2):將-125以16bit儲存,使用2補數。
-125 => 1111101 => 0000000001111101
=> 1111111110000010 => 1111111110000011
2進制轉10進制:
<1>如果最左邊的bit是0(正數)。
1-1…將數字由二進制轉為十進制。
1-2…在數字前加+號。
例:將0000000000000110轉為十進制(使用2補數)
0000000000000110 => 6 => +6
<2>如果最左邊的bit是1 (負數)。
2-1…2補數減1,變為1補數。
2-2…將所有的0變1;1變0。
2-3…將數字由2進制轉為10進制。
2-4…在數字前加-號。
例:將1111111110000100轉為十進制(使用2補數)
1111111110000011 => 1111111110000010
=> 0000000001111101 => 125 => -125
方法2:
10進制轉2進制:
<1>將數字改為2進制;正負號省略。
<2>如果數目少於X bits,在左邊補0直到X bits。
<3>如果是正號,不需要其他動作。
如果是負號,維持最右邊的0直到第一個1(包含)不變,其餘的皆變換。
(0變1,1變0)
例(1):將+6以16bit儲存,使用2補數
+6 => 110 => 0000000000000110
例(2):將-125以16bit儲存,使用2補數
-125 => 1111100 => 0000000001111100 => 1111111110000100
2進制轉10進制:
<1>如果最左邊的bit是0 (正數)。
1-1…將數字由2進制轉為10進制。
1-2…在數字前加+號。
例:將0000000000000110轉為10進制(使用2補數)
0000000000000110 => 6 => +6
<2>如果最左邊的bit是1 (負數)。
2-1…維持最右邊的bits不變直到第一個1(包含),其餘的皆變換。
(0變1,1變0)。
2-2…將數字由2進制轉為10進制。
2-3…在數字前加-號。
例1111111110000011轉為10進制(使用2補數)
1111111110000010 => 0000000001111101 => 125 => -125
二者之間的差異
10進制轉2進制:
方法1需要先轉換到1補數,再用1補數+1轉為2補數,使用上較為簡單,
但計算速度比較慢。
方法2就直接轉換成2補數,在使用上比較容易出錯,不過計算速度會比較快。
2進制轉10進制:
方法1須先使-1變為1補數,然後才能轉換成10進制,計算較為簡單,計算速度緩慢。
方法2可以直接轉換,比較容易出錯,但計算速度較快。
转载于:https://www.cnblogs.com/sleepy/archive/2011/07/10/2102528.html
二补数 (2's complement)相关推荐
- 二补数(2’scomplement)乘法算法及其Verilog实现 - 固定系数h
变量x与固定系数h二补数乘积算法及其Verilog实现(signed 2'scomplement) 一.二补数乘法算法 我们设计有符号乘法器时会遇到一个问题,负数二进制数不能直接移位相乘再相加,这样做 ...
- 科普文章-另一个视角解读计算机编码(修订版)【一个吊丝的个人理解】
本文引用文章地址 科普文章-另一个视角解读计算机编码(修订版)_dog250的博客-CSDN博客https://blog.csdn.net/dog250/article/details/7338187 ...
- 坚持完成这套学习手册,你就可以去 Google 面试了
from: http://geek.csdn.net/news/detail/107064 本文为掘金投稿,译文出自:掘金翻译计划 原文地址:Google Interview University 原 ...
- 补码、无符号数减法运算
1. 补码 Two's Complement(二补数.补码)是对二进制数的数学运算,运算过程为:对二进制序列每一位取反(0->1; 1->0),再加1. bits 取反 补码 011 10 ...
- 位运算的奇技淫巧:Bit Twiddling Hacks
原文名:Bit Twiddling Hacks 原文地址:http://graphics.stanford.edu/~seander/bithacks.html 作者:Sean Eron Anders ...
- Google Interview University - 坚持完成这套学习手册,你就可以去 Google 面试了
作者:Glowin 链接:https://zhuanlan.zhihu.com/p/22881223 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 原文地址:Goo ...
- 【CSAPP】计算机系统知识点(新国立NUS课程,中文版)
文章目录 1. 数值系统 `Number System` 1.1 数据表示方式 `Data Representation` 1.2 十进制数值系统 `Decimal (base 10) ` 1.3 其 ...
- LeetCode-Convert_a_Number_to_Hexadecimal
题目: Given an integer, write an algorithm to convert it to hexadecimal. For negative integer, two's c ...
- [译] Google Interview University 一套完整的学习手册帮助自己准备 Google 的面试
[译] Google Interview University 一套完整的学习手册帮助自己准备 Google 的面试 十一七天乐,看池博的github,发现这个markdown,转过来mark一下 原 ...
- Google Interview University | 坚持完成这套学习手册,你就可以去 Google 面试了
Google Interview University 一套完整的学习手册帮助自己准备 Google 的面试 原文地址:Google Interview University 原文作者:John Wa ...
最新文章
- html5简单游戏案例,HTML5存储(带一个粗糙的打怪小游戏案例)
- Facebook 开源了一整套重要的 Linux 内核组件与工具!
- Python 下的 tcp server/client 通信
- C# 10 新特性 —— CallerArgumentExpression
- python断点续传下载_python requests 断点续传下载
- speak 计算机英语作文,跪求一篇英语作文 题目:论计算机的优缺点
- 计算机控制技术数据存储器有,计算机控制技术复习资料.doc
- 高质量程序设计指南C++/C试题
- 你的新电脑会预装什么软件?这些才是你装机必备的全家桶!
- 简述人工智能的应用领域
- 图片识别——均值哈希算法
- 光纤布拉格光栅(FBG)笔记【2】:反射率
- SQLyog设置唯一
- 共享充电语音提醒功能如何实现?
- JAVA SE之面向对象12:集合3(Set)
- std list/vector sort 排序就这么简单
- Linux lds 文件格式分析(一)
- 苹果删除照片不释放内存_删除的照片怎么找回?高效找回不耽误!
- Git暂存区的意义或git add的意义
- 18个网站的Python爬虫登录示例 | 开源项目推荐
热门文章
- vue3+vant Failed to resolve import “E:/code3/jianmu-user-yd/node_modules/vant/lib/vant/es/icon/style
- 柏拉图式爱情 (精神爱情)
- java se 64位_【JavaSERuntime(jre864位版)免费版下载】Java SE Runtime(jre8 64位版) 8.0-ZOL软件下载...
- android svg 线条动画教程,【Web动画】SVG 实现复杂线条动画
- css重复,CSS小课堂之可重复渐变
- 思考怎么成为一名合格的技术总监?
- 〖小狼毫〗小狼毫使用心得分享
- MLX90640 红外热成像仪测温模块开发笔记(完整版)
- 基于PLC的锅炉控制,基于s7-200的锅炉压力控制的设计,基于西门子S7-200plc与MCGS锅炉压力PID控制系统设计
- 差分约束系统(例题:ccf-再卖菜)