计算机基础(1)-原码、反码、补码

一、概念理解

1.机器数

一个数在计算机中的二进制表上形式,叫做这个数的机器数;

机器数是带符号的,最高位存放符号(0正,1负);

00000011和10000011就是机器数;

2.真值

将带符号的机器数对应的真正值称为机器数的真值;

00000011的真值是+1;

10000011的真值是-1;

3.原码

原码就是符号位加上真值的绝对值;

[+1]=[0000 0001]原;

[ -1]=[1000 0001]原;

4.反码

正数的反码是其本身;

负数的反码是在其原码的基础上,符号位不变,其余各个位取反;

[+1]=[0000 0001]原 = [0000 0001]反;

[- 1]=[1000 0001]原 = [1111 1110]反;

5.补码

正数的补码是其本身;

负数的补码是在反码的基础上+1;

[+1]=[0000 0001]原 = [0000 0001]反 = [0000 0001]补;

[- 1]=[1000 0001]原 = [1111 1110]反 = [1111 1111]补;

二、为什么使用原码、反码、补码

1.因为计算机只知道加法、对于减法就是加上一个负数;

2.为了是计算机运算设计更加简单,也将符号位参与运算;

3.使用原码做运算

1-1=1+(-1)=[0000 0001]原 + [1000 0001]原 = [1000 0010]原 = – 2

得出结论:使用原码计算减法,让符号位参与计算,结果是不正确的

4.使用反码做运算

1-1=1+(-1)=[0000 0001]反 +[1111 1110]反 =[1111 1111]反 = [1000 0000]原 = –0

得出结论:使用反码计算减法,解决了真值部分的不正确问题,唯一问题是“0”这个特殊值上,0带符号是没有意义的

[0000 0000]反 = [1000 0000]反 = 0,且0的反码有两种表示形式

5.使用补码做运算

1-1=1+(-1)=[0000 0001]补+[1111 1111]补= [0000 0000]补=[0000 0000]原 = 0

这样用0用[0000 0000]表示,而用[1000 0000]表示-128

(-1)+(-127)=[1000 0001]原+[1111 1111]原=[1111 1111]补+[1000 0001]补=[1000 0000]补

实际上是使用以前的-0的补码来表示-128,所以-128并没有原码和反码

得出结论:使用补码计算,不仅修复了0的符号存在两个编码问题,而且还能多表示一个最低数

三、原码、反码、补码表示的范围

原码:

第一位是符号位,所有8位二进制的取值范围是:

[1111 1111,0111 1111] 即 [-127,127]

反码:

反码是通过原码得到的,所以范围和原码一样,也是[-127,127]

补码:

补码比反码多了一个最低数,即范围是[-128,127]

时间: 2024-10-09 14:46:06

计算机基础(1)-原码、反码、补码的相关文章

计算机中的原码,反码,补码与移码

在计算机内,定点数有3种表示法:原码.反码和补码. 原码:就是二进制定点表示法,即最高位为符号位,0表示正,1表示负,其余位表示数值的大小 反码:正数的反码与其原码相同:负数的反码是对其原码逐位取反,但符号位除外.       原码10010=反码11101(10010,1为符号位,故为负) 补码:正数的补码与原码相同,负数的补码是对其原码逐位取反,但符号位除外,然后整个数加1 如果补码的符号位为0,则表示一个正数,其原码就是补码如果补码的符号位为1,则表示一个负数 移码:移码与补码的关系: [

java基础:原码反码补码

计算机在操作的时候,都是采用数据对应二进制的补码来计算的: 原码 反码 补码 原码:用原码,反码,补码来分别表示+7,和-7. 首先得到7的二进制:111

C语言基础(4)-原码,反码,补码及sizeof关键字

1. 原码 +7的原码是0000 0111 -7的原码是1000 0111 +0的原码是0000 0000 -0的原码是1000 0000 2. 反码 一个数如果值为正,那么反码和原码相同. 一个数如果为负,那么符号位为1,其他各位与原码相反 +7的反码0000 0111 -7的反码1111 1000 -0的反码1111 1111 3. 补码 原码和反码都不利于计算机的运算,如:原码表示的7和-7相加,还需要判断符号位. 正数:原码,反码补码都相同 负数:最高位为1,其余各位原码取反,最后对整个

原码 反码 补码 以及 为什么要使用原码反码补码

原始博文网址,无意侵权,只是想记下来以后复习的时候方便, http://www.cnblogs.com/cumtchw/p/4523332.html http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html 机器数 一个数在计算机中的二进制表示形式,叫做这个数的机器数,机器数是带符号的,在计算机中用一个数的最高位存放符号,正数为0,负数为1,比如,十进制中的+3,假设计算机字长为8位,转换成二进制就是0000 0

计算机基础知识_原码反码补码

一.原码,反码,补码 1.原码 比如一个二进制数字 最高位是0,(0代表正数) 0010 1000 那么原码就是0010 1000 反码: 0010 1000 补码: 0010 1000 都是一样的,这个二进制数字的10进制是40 所以是正数 正数的原反补都是一样的 2.反码 反码就是原码的取反,二进制的 0变为1 1变为0 ,看最高符号位是0 还是1,如果是1,则你要0变为1,1变为0, 3.补码: 负数的的是原码 取反 在加1 变成补码(二进制数) 正数的原码 加上负数的补码就等于是做减法运

[C++基础]原码/反码/补码、二进制位运算

原码/反码/补码 编码 定义 实例 原码 最高位为符号位,"0"表示正,"1"表示负,其余位表示数值的大小. [+100]原=01100100 [+0]原=00000000 [-100]原=11100100 [-0]原=10000000注意:在原码中,零有两种表示形式. 反码 正数的反码与其原码相同:负数的反码是对其原码逐位取反,但符号位除外. [+100]反=01100100 [+0]反=00000000 [-100]反=10011011[-0]反=1111111

Java基础——原码, 反码, 补码 详解

上一篇提到了原码.反码和补码(见 http://www.linuxidc.com/Linux/2015-02/113862.htm),可是自己又捋了半天,有点懂了的样子,可是又不能清晰的表达.暂且记住以下两点吧: 正数的反码和补码都与原码一样: 负数的反码.补码与原码不同,负数的反码:原码中除去符号位,其他的数值位取反,0变1,1变0.负数的补码:其反码+1. 做个小Demo,分别写出7和-7的原码.反码.补码.(其中第一位是符号位,0表示正数,1表示负数) Demo 7 -7 原码 00000

<13>【了解】计算机中的进制+【理解】原码反码补码基本概念+【理解】为什么要引入反码、补码?+【掌握】位运算符介绍及使用+位运算应用:编程实现10进制转2进制

1 #include <stdio.h> 2 3 int main(int argc, const char * argv[]) { 4 5 //定义10进制数,打印出10.8.16进制的值 6 int a = 13; 7 printf("%d\n",a); 8 printf("%o\n",a); 9 printf("%x\n",a); 10 11 //int 64 4个字节 12 int b = 0b0000000000000000

原码, 反码, 补码 详解

本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计

[转]原码, 反码, 补码 详解 很全

本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计