原码的优点:简单直观;例如,我们用8位二进制表示一个数,+11的原码为00001011,-11的原码就是10001011
缺点:原码不能直接参加运算,可能会出错。例如数学上,1+(-1)=0,而在二进制中00000001+10000001=10000010,换算成十进制为130。显然出错了。
所以原码的符号位不能直接参与运算,必须和其他为分开,这就增加了硬件的开销和复杂性
具体定义还分小数和整数:
①小数原码的定义
[X] =
X 0≤X <1
1- X -1 < X ≤ 0
例如: X=+01011 , [X]原= 01011
X=-01011 [X]原= 11011
②整数原码的定义
[X]原 =
X 0≤X <2n
2n-X - 2n < X ≤ 0
问题二:请问原码和源码有什么区别? 20分 没有区别。顶多是习惯性的:源代码,更倾向于代码、复杂高深的代码。
源码算是源代码的简称,包括源代码、及相关可直接运行的文件,即源文件。
一般情况下,源码=源文件。
问题三:什么是原码,补码,反码 1)原码表示 原码表示法是机器数的一种简单的表示法。其符号位用0表示正号,用:表示负号,数值一般用二进制形式表示。设有一数为x,则原码表示可记作[x]原。 例如,X1= +1010110 X2= 一1001010 其原码记作: [X1]原=[+1010110]原=01010110 [X2]原=[-1001010]原=11001010 在原码表示法中,对0有两种表示形式: [+0]原=00000000 [-0] 原=10000000 2)补码表示 机器数的补码可由原码得到。如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。设有一数X,则X的补码表示记作[X]补。 例如,[X1]=+1010110 [X2]= 一1001010 [X1]原=01010110 [X1]补=01010110 即 [X1]原=[X1]补=01010110 [X2] 原= 11001010 [X2] 补=10110101+1=10110110 机器数的补码可由原码得到。如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。设有一数X,则X的补码表示记作[X]补。 例如,[X1]=+1010110 [X2]= 一1001010 [X1]原=01010110 [X1]补=01010110 即 [X1]原=[X1]补=01010110 [X2] 原= 11001010 [X2] 补=10110101+1=10110110 (3)反码表示法 机器数的反码可由原码得到。如果机器数是正数,则该机器数的反码与原码一样;如果机器数是负数,则该机器数的反码是对它的原码(符号位除外)各位取反而得到的。设有一数X,则X的反码表示记作[X]反。 例如:X1= +1010110 X2= 一1001010 [X1]原=01010110 [X1]反=[X1]原=01010110 [X2]原=11001010 [X2]反=10110101 反码通常作为求补过程的中间形式,即在一个负数的反码的未位上加1,就得到了该负数的补码。 例1 已知[X]原=10011010,求[X]补。 分析如下: 由[X]原求[X]补的原则是:若机器数为正数,则[X]原=[X]补;若机器数为负数,则该机器数的补码可对它的原码(符号位除外)所有位求反,再在未位加1而得到。现给定的机器数为负数,故有[X]补=[X]原十1,即 [X]原=10011010 [X]反=11100101+1 [X]补=11100110 例2 已知[X]补=11100110,求[X]原。 分析如下: 对于机器数为正数,则[X]原=[X]补 对于机器数为负数,则有[X]原=[[X]补]补 现给定的为负数,故有: [X]补=11100110 [[X]补]反=10011001+1 [[X]补]补=10011010=[X]原+1 [[X]补]补=10011010=[X]原 总结一下,原码(为负时,正时都不变)全部取反即得到反码,反码加 1就得到补码了,就是这么简单。
问题四:一个二进制数11010100的原码,补码是什么? 计算机里表示正负不是用+、-号表示的
11010100如果是原码就没有所谓的+或-
因为原码的最高位表示的是符号位,1为负数,0为正数
负数的补码是除符号外其余各位按位取反后加1,为10101100
如果11010100是二进制码
它本身是个正数,它的原码要看用几位二进制表示,如果是八位就超出范围了因为最高位要作为符号位后七位才能用来表示数值,用十六的二进制表示则最高位用0表示,数值前多出的用0补则11010100的十六位二进制原码为0000000011010100,正数的补码就是原码
而-11010100的十六位二进制原码最高位符号位后面的作为数值位补0,则1000000011010100,负数的补码则是符号位不变其余各位按位取反最后末尾加1,则有-11010100的十六位二进制补码为1111111100101100
问题五:1,0001011的原码是什么 如果是8位的话,第一位表示符号位,
负数为1,正数为0,
-1原码就是 10000001
第一个1对应于负号,
最后一个1对应于“2的零次方”=1
就是这样算的,换成二进制表示再加个符号位而已
问题六:-11的原码是什么 如果-11是真值的话,那他的原码为:111
问题七:原码这里,是什么意思 源代码(也称源程序),是指一系列人类可读的计算机语言指令。 在现代程序语言中,源代码可以是以书籍或者磁带的形式出现,但最为常用的格式是文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码的最终目的是将人类可读的文本翻译成为计算机可以执行的二进制指令,这种过程叫做编译,通过编译器完成。 代码组合 源代码作为软件的特殊部分,可能被包含在一个或多个文件中。一个程序不必用同一种格式的源代码书写。例如,一个程序如果有C语言库的支持,那么就可以用C语言;而另一部分为了达到比较高的运行效率,则可以用汇编语言编写。 较为复杂的软件,一般需要数十种甚至上百种的源代码的参与。为了降低种复杂度,必须引入一种可以描述各个源代码之间联系,并且如何正确编译的系统。在这样的背景下,修订控制系统(RCS)诞生了,并成为研发者对代码修订的必备工具之一。 还有另外一种组合:源代码的编写和编译分别在不同的平台上实现,专业术语叫做软件移植。 质量 对于计算机而言,并不存在真正意义上的“好”的源代码;然而作为一个人,好的书写习惯将决定源代码的好坏。源代码是否具有可读性,成为好坏的重要标准。软件文档则是表明可读性的关键。 源代码主要功用有如下贰种作用: 依、生成目标代码,即计算机可以识别的代码。 贰、对软件进行说明,即对软件的编写进行说明。为数不少的初学者,甚至少数有经验的程序员都忽视软件说明的编写,因为这部分虽然不会在生成的程序中直接显示,也不参与编译。但是说明对软件的学习、分享、维护和软件复用都有巨大的好处。因此,书写软件说明在业界被认为是能创造优秀程序的良好习惯,一些公司也硬性规定必须书写。 (需要指出的是,源代码的修改不能改变已经生成的目标代码。如果需要目标代码做出相应的修改,必须重新编译。 ) 如果按照源代码类型区分软件,通常被分为两类:自由软件和非自由软件。自由软件一般是不仅可以免费得到,而且公开源代码;相对应地,非自由软件则是不公开源代码。所有一切通过非正常手段获得非自由软件源代码的行为都将被视为非法
问题八:-11011011的原码,补码,反码分别是什么 -91原码:11011011反码:10100100补码:10100101-80原码:11010000反码:10101111补码:10110000-73原码:11001001反码:10110110补码:10110111-53原码:1110101反码:1001010补码:1001011真值为正时。其原码,反码,补码完全相同。真值为负时,其原码就是把负号改为1,其余不变。反码就是负号改为1,其余取反。补码就是在反码的基础上加1,加1时记得是逢2进1。
问题九:原码,反码和补码表示的规则分别是什么 一 机器数和真值
在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念
1、机器数
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1
比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。
那么,这里的 00000011 和 10000011 就是机器数。
2、真值
因
为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3
而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = C000 0001 = C1
二 原码, 反码, 补码的基础概念和计算方法
在探求为何机器要使用补码之前, 让我们先了解原码, 反码和补码的概念对于一个数, 计算机要使用一定的编码方式进行存储 原码, 反码, 补码是机器存储一个具体数字的编码方式
1 原码
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值 比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位 因为第一位是符号位, 所以8位二进制数的取值范围就是:
[1111 1111 , 0111 1111]
即
[-127 , 127]
原码是人脑最容易理解和计算的表示方式
2 反码
反码的表示方法是:
正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值 通常要将其转换成原码再计算
3 补码
补码的表示方法是:
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1 (即在反码的基础上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
对于负数, 补码表示方式也是人脑无法直观看出其数值的 通常也需要转换成原码在计算其数值
问题十:6的原码 反码 补码分别是什么? 源码、反码、补码都是00000110mov
只是简单的储存,单看数据本身,无法判断一个二进制数有没有符号,是用补码、反码、还是原码,甚至是否代表一个数字。那些都是编程的人为数据赋予的意义。如果有大段程序,可以看出逻辑、算法,也许可以辨别。
一般来说,表达负整数,目前只有用“补码”一个方法。“反码”和“原码”纯属历史,微处理器年代已经不用了。至于改二进制数有没有符号,就要从程序的上下文找线索了。有些指令是分有符号和无符号的,如果出现了,就比较好判断。以
8086
指令集为例:
乘
除
右移
无符号
mul
div
shr
有符号
imul
idiv
sar
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)