原码反码补码

原文:原码反码补码

原码:  -16  =  10010000    1表示符号位(1负0正)

反码:  -16  =  11101111   

补码:  -16  =  11110000

 

原码:   9  =  00001001    1表示符号位(1负0正)

反码:   9  =  00001001  

补码:   9  =  00001001

 

-16 + 9

11110000

+  00001001

   11111001(补码)

 

11111001的反码 10000110

11111001的原码 10000111 = -7

 

-7  原码  100000111

-7  反码  111111000

-7  补码  111111001

 

补码减1得到反码,反码取反得到原码

-----------------------------------------------------------------

#include<stdlib.h>
#include<stdio.h>
int main(int argc, char* argv[])
{
 short a, b, c;
 a = 32767;
 b = a + 1;
 c = b + 1;
 printf("%d\n", sizeof(a));
 printf("a = %d, b = %d, c = %d", a, b, c);
 getchar();
 return EXIT_SUCCESS;
}

运行结果:

因为a = 32767,正数的原码反码补码都是一样,内存中数据用补码表示,所以a在内存中表示为0111 1111 1111 1111

1在内存中的表示为0000 0000 0000 0001

于是a + 1 对补码进行与运算得到

     0111 1111 1111 1111

     0000 0000 0000 0001

---------------------------------------

     1000 0000 0000 0000

 而1000 0000 0000 0000最高位是1表示负数,又因为其是补码,补码减1取反得到:

     1000 0000 0000 0000

     0000 0000 0000 0001

------------------

     1111 1111 1111 1111

对1111 1111 1111 1111 取反得到

   1000 0000 0000 0000 值为-32768

因为-32768 在内存中的补码为: 1000 0000 0000 0000

当-32768 + 1 表示为:

   1000 0000 0000 0000

   0000 0000 0000 0001

-------------------------------------------------

  1000 0000 0000 0001

1000 0000 0000 0001为补码,对其减1取反:

   1000 0000 0000 0001

   0000 0000 0000 0001

-----------------------------------

   1000 0000 0000 0000

对1000 0000 0000 0000取反得到:

   1111 1111 1111 1111表示数值-32767

 

时间: 2024-12-04 07:01:27

原码反码补码的相关文章

原码, 反码与补码基础知识详细介绍_C 语言

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

java c-如何用C语言或者JAVA实现字长为八位数的二进制定点数转换为源码反码补码?

问题描述 如何用C语言或者JAVA实现字长为八位数的二进制定点数转换为源码反码补码? 老师要求的简单作业,但我是大二才转的计算机科学与技术专业,基础几乎为0!哪位能帮写一个,最好能有注释,这可能有点麻烦,没注释的也可以,我有了源代码可以自己琢磨琢磨!跪谢了在此!

java原码、补码、反码总结

1.1. java虚拟机整数 在java虚拟机中整数有byte.short.int.long四种 分别表示 8位.16位.32位.64位有符号整数.整数使用补码表示. 所以我们先了解一下原码和反码. 1.1.1. 原码 所谓原码就是符号位加上数字的二进制表示,int为例,第一位表示符号 (0正数 1负数)简单期间一个字节表示 +7的原码为: 00000111  -7的原码为: 10000111 对于原码来说,绝对值相等的正数和负数只有符号位不同. 1.1.2. 反码 一个数如果为正,则它的反码与

原码、反码和补码

什么是数制?用来表示数值的规则,如十进制,二进制. 机器数 用二进制的形式来表示数;最高位为符号位,1表示负数,0表示正数. 如:  1---->00000001;-1---->1000 0001 真值 从上面我们知道了机器数是计算机用来表示数的一种形式,但是用于最高位是符号位.这样就出现这样情况,1000 0001表示的真正数值为1,而不是129.这样我们把一个机器数表示的真正的实际的意义的值称之为真值. 原码.反码.补码 总体上来讲原码反码补码都是计算机本身用来存储数的一种方式. 原码 规

【转】闲扯原码、反码、补码

  来源:http://dev.csdn.net/htmls/17/17680.html 闲扯原码.反码.补码    相信大家看到这个标题都不屑一顾,因为在任何一本计算机基础知识书的第一章都有他们的解释,但是在书上我们只能找到一些简单的定义,没次看过之后不久就忘了.最近论坛里有人问起这些概念,看到很多人的回复是以前看过现在忘了去看看某某书之类,很少有给出一个合理的解释.于是本人就开始思考(虽然上帝会发笑,我还是要思考.),于是得出了以下的结论.      数值在计算机中表示形式为机器数,计算机只

基础野:细说原码、反码和补码

Brief   说来惭愧虽然刚接触计算机时已经学过原码.反码和补码的内容,但最近重温时却发现"这是什么鬼东西",看来当初只是应付了考试了而已.本篇将试图把他们说个明白,以防日后自己又忘记了.   在深入之前,我们先明确以下几点:   1. 本篇内容全部针对有符号数整数:   2. 对于有符号数整数,其在计算机中的存储结构是 符号位 + 真值域.其中符号位为0表示正数,1表示负数:   3. Q:既然已经有原码,那么为什么还要出现反码.补码等数值的编码方式呢?       A:由于为了降

深入理解计算机系统-之-数值存储(三)-- 原码、反码、补码和移码详解

原码 如果机器字长为n,那么一个数的原码就是用一个n位的二进制数,其中最高位为符号位:正数为0,负数为1.剩下的n-1位表示概数的绝对值. PS:正数的原.反.补码都一样:0的原码跟反码都有两个,因为这里0被分为+0和-0. 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制: [+1]原 = 0000 0001 [-1]原 = 1000 0001 例如: X=+101011 , [X]原= 00101011 X=-101011 , [X]原= 1010

基础03:原码、反码、补码

本文介绍原码.反码.补码,以及为什么要使用补码.需要了解数学的取模运算. 机器数与真值 机器数,即数字在计算机中的二进制表示形式. 真值,第一位用+-表示数字的正负,其余为二进制数. 举个栗子:-3的机器数是10000011,真值是-0000011. 原码 原码,符号位加真值的绝对值. 12 +3[原] = 00000011-3[原] = 10000011 8位二进制数原码的取值范围是[11111111, 01111111],即[-127, 127] 反码 正数的反码是其原码. 负数的反码,符号

原码、反码、补码和移码其实很简单

先上几个例子: 1011 原码:01011  反码:01011  //正数时,反码=原码 补码:01011  //正数时,补码=原码 移码:11011  //补码符号位取反 -1011 原码:11011 反码:10100  //负数时,反码为原码取反 补码:10101  //负数时,补码为原码取反+1 移码:00101  //补码符号位取反 0.1101 原码:0.1101  反码:0.1101  //正数时,反码=原码 补码:0.1101  //正数时,补码=原码 移码:1.1101 -0.1