c语言 补码转原码,C语言编程之二进制原码、反码和补码
概述
在计算机内,有符号数有3种表示法:原码、反码和补码。
在计算机中,数据是以补码的形式存储的,所以补码在c语言的教学中有比较重要的地位,而讲解补码必须涉及到原码、反码。
详细释义
所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
原码、反码和补码的表示方法
定点整数表示法
定点小数小时法
反码
正数:正数的反码与原码相同。
负数:负数的反码,符号位为“1”,数值部分按位取反。
例如: 符号位 数值位
[+7]反= 0 0000111 B
[-7]反= 1 1111000 B
注意:
a. 数0的反码也有两种形式,即
[+0]反=00000000B
[- 0]反=11111111B
b. 8位二进制反码的表示范围:-127~+127
原码
在数值前直接加一符号位的表示法。
例如: 符号位 数值位
[+7]原= 0 0000111 B
[-7]原= 1 0000111 B
注意:
数0的原码有两种形式:
[+0]原= 00000000B
[-0]原= 10000000B
位二进制原码的表示范围:-127~+127
补码
1)模的概念:把一个计量单位称之为模或模数。
例如,时钟是以12进制进行计数循环的,即以12为模。在时钟上,时针加上(正拨)12的整数位或减去(反拨)12的整数位,时针的位置不变。
对于一个模数为12的循环系统来说,加2和减10的效果是一样的;因此,在以12为模的系统中,凡是减10的运算都可以用加2来代替,这就把减法问题转化成加法问题了(注:计算机的硬件结构中只有加法器,所以大部分的运算都必须最终转换为加法)。
10和2对模12而言互为补数。
同理,计算机的运算部件与寄存器都有一定字长的限制(假设字长为8),因此它的运算也是一种模运算。当计数器计满8位也就是256个数后会产生溢出,又从头开始计数。产生溢出的量就是计数器的模,显然,8位二进制数,它的模数为2^8=256。在计算中,两个互补的数称为“补码”。
2)补码的表示:
正数:正数的补码和原码相同。
负数:负数的补码则是符号位为“1”。并且,这个“1”既是符号位,也是数值位。数值部分按位取反后再在末位(最低位)加1。也就是“反码+1”。
例如: 符号位 数值位
[+7]补= 0 0000111 B
[-7]补= 1 1111001 B
补码在微型机中是一种重要的编码形式,请注意:
a. 采用补码后,可以方便地将减法运算转化成加法运算,运算过程得到简化。
正数的补码即是它所表示的数的真值,而负数的补码的数值部份却不是它所表示的数的真值。
采用补码进行运算,所得结果仍为补码。
b. 与原码、反码不同,数值0的补码只有一个,即
[0]补=00000000B。
若字长为8位,则补码所表示的范围为-128~+127;进行补码运算时,应注意所得结果不应超过补码所能表示数的范围。
原码、反码和补码之间的转换
由于正数的原码、补码、反码表示方法均相同,不需转换。
在此,仅以负数情况分析。
(1) 已知原码,求补码。
例:已知某数X的原码为10110100B,试求X的补码和反码
解:由[X]原=10110100B知,X为负数。求其反码时,符号位不变,数值部分按位求反;求其补码时,再在其反码的末位加1。
1 0 1 1 0 1 0 0 原码
1 1 0 0 1 0 1 1 反码,符号位不变,数值位取反
1 1 0 0 1 1 0 0 补码,符号位不变,数值位取反+1
故:[X]补=11001100B,[X]反=11001011B。
(2) 已知补码,求原码。
分析:按照求负数补码的逆过程,数值部分应是最低位减1,然后取反。但是对二进制数来说,先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1 有方法。
例:已知某数X的补码11101110B,试求其原码。
解:由[X]补=11101110B知,X为负数。
1 1 1 0 1 1 1 0 补码
1 1 1 0 1 1 0 1 反码(符号位不变,数值位取反加1)
1 0 0 1 0 0 1 0 原码(符号位不变,数值位取反)
关于补码的补充例子:
一个正的整数的补码就是这个整数变成二进制的值。
举例:一个int型变量i=10,其二进制补码就是0000 0000 0000 0000 0000 0000 0000 1010(0x0000000A)
2. 一个负整数的二进制补码,就是该负数的绝对值所对应的补码全部取反后加1.
举例:int i=-10的补码如何求得:
先求-10的绝对值10的补码是0000 0000 0000 0000 0000 0000 0000 1010(0x0000000A);
再将求得的补码取反: 1111 1111 1111 1111 1111 1111 1111 0101
再将取反后得到的补码加1: 1111 1111 1111 1111 1111 1111 1111 0101 + 1
即可得到-10的二进制补码: 1111 1111 1111 1111 1111 1111 1111 0110(0xFFFFFFF6)
3. +0和-0的二进制补码都是0
首先+0的二进制补码是0;
-0的二进制补码是+0的二进制补码取反后加1,+0的二进制补码为0,取反后为FFFFFFFF,加1后还是0
原码和反码在数值0都有二意,唯有补码在数值0是唯一的码值!
c语言 补码转原码,C语言编程之二进制原码、反码和补码相关推荐
- 在标准ASCII码表中,已知英文字母K的十六进制码值是4B,则二进制ASCII码1001000对应的字符是( )
在标准ASCII码表中,已知英文字母K的十六进制码值是4B,则二进制ASCII码1001000对应的字符是( ). A. G B. H C. I D. J 提示:答案B 解析:K的十六进制4B转换成二 ...
- 通过原码、反码、补码彻底搞清左移、右移、无符号右移
文章目录 原码.反码.补码 有符号右移>> 无符号右移>>> 有符号左移<< 总结有无符号 原码.反码.补码 正数 正数的原码.反码.补码都是该数字的二进制表 ...
- 计算机网络中的原码、反码、补码
写在前面 原码.反码.补码是计算机组成原理中的概念,是计算机网络的基础知识之一.这些概念是为了处理二进制数的符号位而引入的,常用于计算机中的整数运算,也常用于数据存储和传输等领域.因此,了解和掌握这些 ...
- 二进制负数的反码补码
二进制正数的反码,补码,原码都是一样的 负数的话,首先是原码的首位是正数置为1,然后反码就除了符号位都反转,反转之后再加1就是补码. For example: -79 79的原码 01001111 - ...
- 原码、反码、补码及位操作符,C语言位操作
计算机中的所有数据均是以二进制形式存储和处理的.所谓位操作就是直接把计算机中的二进制数进行操作,无须进行数据形式的转换,故处理速度较快. 1.原码.反码和补码 位(bit) 是计算机中处理数据的最小单 ...
- 用c语言编程求字符的反码,编程达人 《汇编、C语言基础教程》第一章 进制1.5原码、反码与补码(连载)...
1.5 原码.反码与补码 计算机存储的数据是以补码的形式体现的,所以就要我们掌握原码.反码与补码的概念. 本节必须掌握的知识点: u 计算机中正数.负数的表现形式 u 原码.反码.补码的概念 假设有个 ...
- C语言-整数:short、int、long、long long(signed和unsigned)、原码、反码、补码
目录 一.实验环境 二.C语言整数简介 1.类型说明符 (1) signed和unsigned (2) 省略书写 2.sizeof运算符-计算当前环境下各类型的字节数 三.整数存储-原码,反码,补码 ...
- C语言中八进制和16进制怎么表示,原码,反码及补码,C语言按位取反运算符~
借鉴被人的 C语言中8进制和16进制怎么表示 C语言本身支持的三种输入是: 1. 十进制.比如20,457: 2. 十六进制,以0x开头.比如0x7a: 3. 八进制,以0开头.比如05,0237 所 ...
- C语言简介之进制转换,原码、反码、补码,位运算符,函数
文章目录 进制转换: 十进制转二进制:(转其他进制) 二进制转十进制: 二进制转八进制: 二进制转十六进制: 原码.反码.补码: 位运算符: & ,|, ~, ^, <<, > ...
最新文章
- 不错的工具:Reflector for .NET
- 阿里淘宝一直在推的响应式编程到底是个什么鬼?
- Apache CXF实现Web Service(3)——Tomcat容器和不借助Spring的普通Servlet实现JAX-RS(RESTful) web service...
- oracle的sql口令,Oracle数据库的SYS口令是什么?
- 十五、CI框架之自动加载数据库
- 浅谈Java两种并发类型——计算密集型与IO密集型
- 计算机软件进费用什么科目,购买软件费用如何记账?
- lisp 非对称缓和曲线_GIS环境下缓和曲线绘制方法研究
- JS继承--圣杯模式的详解
- linux ubuntu 播放csf格式视频解决方案
- win8 配置要求
- tomcat启动成功并能运行项目,但无法显示那只小猫
- 绝了!超全面的Java调优方案,我司已用7年,并得到验证!(万能通用)
- C++ 类与对象_类的其他成员(常成员,静态成员,友元)
- 魔兽地图服务器存档修改本地存档,【Jass】Preload存档系统,本地写入文件并读取...
- Unity编辑器开发(七)——Scene界面拓展之Handles
- 【腾讯Bugly干货分享】Android 进程保活招式大全
- PIC单片机开发环境搭建_MPLAB X IDE安装步骤
- [洛谷 P3787] 冰精冻西瓜
- Matplotlib Python 画图工具包教程学习笔记4 等高线图以及3D图形的画法
热门文章
- word 编辑过程中变为只读_职场小贴士(十一)办公软件小窍门之word篇
- vue使用 echarts 3d echarts_esm_echarts__WEBPACK_IMPORTED_MODULE_0__.registerPostInit is not a function
- 2022年全球扁藻行业分析报告
- SAP HANA跟我学HANA系列之创建分析视图一
- Python写入、读取json文件
- 求两个数之间的随机数及猜数字游戏
- 5分钟完全掌握Python协程
- revit二次开发 导出结构柱三角面出现的特殊情况
- outlook显示imap服务器已关闭,outlook2010怎么老提示IMAP服务器已关闭连接啊
- linux ksh 用户名,linux ksh