计算机基础知识:原码、反码、补码
可能很多人有这样的疑问,我们为什么要了解原码、反码、补码,它能帮助我们解决什么问题?在编写代码中有什么实际用途呢?
我是这样认为的,其一,作为计算机基础知识,我们必须有所了解。其二、这些基础知识无论是普通的编写代码,还是研究高超的算法都离不开它。
例:我们常见的位运算 按位与(&)、按位或(|)、取反(~)等等。
在代码中, 我们可能经常会碰到这样的需求,要计算一个数是偶数或奇数,一般我们这样写 n % 2 取余,如果余0则为偶,否则为奇。
我们可以利用按位与(&)很巧妙的解决这问题,而且效率会更高,因为位运算是对内存数据进行操作,不需要转换成十进制,因此它的处理速度更快。
我们来判断整数n是奇是偶,可以运用表达示 n & 1,如 n = 5, n & 1返回值1; 如n=6,n&1返回值0;因为,在二进制里面,末位为0表示偶数,为1表示奇数,效果与n % 2 取余是一样的,但比它要快。
当然,除了这个,还有非常多的用途。
好啦,我们进入正题!
------------------------------------------------------------------------------------------------------------------------------------------------
我们知道,计算机中所有数据最终都是以二进制数表示。
相信大家也学过如何将一个十进制数转换为二进制数,如果觉得换算比较麻烦,可以用系统自带的计算器辅助换算。
我们也学过字节与位,1字节=8位,通常在Asp.net、Java等高级编程语言中int类型默认以32位(4字节)表示,当然你可以显示申明以16位或64位表示。现假设有int类型数,值为9,在计算机中以二进制方式表示如下:
--8位--
0000 1001
--16位--
0000 0000 0000 1001
--32位--
0000 0000 0000 0000 0000 0000 0000 1001
--64位--
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1001
通过以上可以看出,数值9转换成二进制是0000 1001,在16位、32位或64位中它们占位比较多,所以前面补0填充。
OK,这是数值9的二进制表述,那么如果是-9,它在计算中如何表述呢?
在计算机中,负数是以其正值的补码形式表述的。这就需要我们搞清楚什么是原码、反码、补码,他们之间有什么暧昧的关系啦。
原码:一个整数,按照绝对值换算成的二进制数,称为原码。(数的绝对值:正数和零的绝对值是它本身,负数的绝对值是它的相反数。总之,一个数的绝对值是非负数。)
如:数值-9的绝对值为9,数值9的二进制是 0000 1001,这就是-9的原码。
反码:在原码基础上按位取反,产生的新二进制数称为原二进制数的反码。简单理解就是:原为1的变成0,原为0的变成1.
如:数值-9的原码是 0000 1001。把它的每一位取反后为 1111 0110
补码:反码加1为补码。(补码=反码+1; 反码=原码取反; 原码=数值绝对值的二进数数)
如:数值-9的原码是 0000 1001。把它的每一位取反后为 1111 0110,计算补码=反码+1,也就是 1111 0110 + 1 = 1111 0111
因此,数值-9在计算机中二进制表述为:1111 0111
我们再来一例:-15在计算机中如何表述:
1、原码,数值-15的绝对值15,它的二进制表述是 0000 1111
2、反码,原码基础上取反为: 1111 0000
3、补码,反码+1得补码, 1111 0001
所以-15在计算机里用二进制表述就是 1111 0001
转载于:https://www.cnblogs.com/event/p/6406293.html
计算机基础知识:原码、反码、补码相关推荐
- 计算机中的原码,计算机中的原码反码补码移码
计算机中的原码反码补码移码 原码 数值 X 的原码记为 [X]原,如果机器字长为 n (即采用 n 个二进制位表示数据),则最高位是符号位,0 表示正号,1 表示负号,基余的 n~1 位表示数值的绝对 ...
- 【计算机组成原理】原码 反码 补码 移码的转换
原码 反码 补码 移码的转换 这三种机器码都是二进制数据的表现形式,可以表现正数和负数. 原码是可以直接表现出数据的正负和大小. 正数的原码.反码和补码都是相同的. 反码用于原码和补码的转换的功能. ...
- 【计算机组成原理】原码 反码 补码 移码
目录 一.原码.反码.补码.移码的概念 1. 真值 2. 机器数 1. 原码 2. 反码 3. 补码 4. 移码 二.原码.反码.补码.移码的转换 1. 原码转反码 2. 原码转补码 3. 原码转移码 ...
- c语言原码 补码 反码,C语言 原码--反码--补码
//原码,反码,补码 #include #include //数值的表示方法--原码.反码和补码 //原码:最高位为符号位,其余各位为数值本身的绝对值 //反码: //正数:反码与原码相同 //负数: ...
- 计算机基础:原码补码反码计算
结论: 1.正数的原码=反码=补码 2.负数的反码=在其原码的基础上, 符号位不变,其余各个位取反 负数的补码=在反码的基础上+1 负数的补码=在原码的基础上, 符号位不变, 其余各位取反, 最后末位 ...
- 关于计算机中 原码, 反码, 补码 详解
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...
- 【原码, 反码, 补码的基础概念和计算方法】
数值在计算机中是以补码的方式存储的,在探求为何计算机要使用补码之前, 让我们先了解原码, 反码和补码的概念. 原码就是符号位加上数字的二进制表示, 即用第一位表示符号, 其余位表示值. 反码的表示方法 ...
- 计算机组成原理---之原码,补码,反码
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...
- C语言基础(二)—— 常量与变量、数据类型、进位制、关键字、原码反码补码、限定符、字符串格式化输入输出
1. 常量与变量 1.1 关键字 1.2 数据类型 数据类型的作用:编译器预算对象(变量)分配的内存空间大小. 1.3 常量 在程序运行过程中,其值不能被改变的量 常量一般出现在表达式或赋值语句中 整 ...
- java基础-原码反码补码
本文帮助理解,Java中原码反码补码的原理 1:原码反码补码,基础概念和计算方法 对于一个数,计算机需要使用一定的编码方式进行存储.原码反码补码是计算机存储一个具体数字的编码方式. 原码: 第一位表示 ...
最新文章
- 从自动驾驶汽车开始,机器学习开始与物理世界交互
- CGAL window 10安装、Demo使用步骤以及问题解决记录
- java 发送 接受 xml请求
- Wireshark(2):应用Wireshark观察基本网络协议
- sql2008 服务器未响应,sql配置管理器,SQL server (MSSQLSERVER)开启不了,请求失败或服务器未响应....
- pytorch 卷积
- 【异常(待解决)】org.apache.http.NoHttpResponseException: api.weixin.qq.com:443 failed to respond
- 连通性问题--Algorithms IN C读书笔记
- html中treegrid不显示根节点,treegrid如何让子节点默认不展开
- mysql游标是什么特性_[转]MySQL游标特性
- final、finally、finalize 区别
- Android 四大组件学习之BroadcastReceiver四
- 2009年英国大学综合排名
- eth转入地址_ETH智能合约靶机 审计学习攻略
- 怎么读取cf卡id_simotion读写CF卡,保存/读取变量
- 来到广西的十年之吃喝
- 代码维护服务器,维护服务器的利器-pubwin 2009程序代码
- STM32F429--STM32的PWM占空比产生与测量
- Kubectl(完整)基本操作命令
- 校园网测试--ettercap使用
热门文章
- Windows下编程需要看哪些书
- 【机器视觉】 dev_set_shape算子
- 【STM32】SysTick定时器
- 【Linux系统编程】特殊进程之僵尸进程
- python开源爬虫项目违法吗_Python开源爬虫项目代码:抓取淘宝、京东、QQ、知网数据...
- 用c语言get统计字母个数,请问这个用c怎么做:输入一串字符,分别统计其中数字和字母的个数...
- centos设置mysql初始l密码_CentOS 7下安装MySQL后重置root密码方法
- oracle的OCI目录下没有samples包的解决方案
- Codeforces 1480A. Yet Another String Game (阅读理解题)
- TCP/IP学习笔记(三)TCP流量控制以及滑动窗口