计算机中如何表示正负数?如何表示整数和实数?
这个问题并不复杂,表示一个带符号的整数常用的方法有三种:原码、反码表示法和补码表示法。先来看看原码表示法。在计算机中,数的符号是用一个数位来表示的,一般用数的最高位。正号用0表示,负号用1表示。所谓原码,就是简单地遵循这一规定的一种表示法。例如我们用原码表示+1,可以写成00000001,其最高位是0,表明这个数的符号是"+"。如果表示-1,则可以写成"10000001",最高位的"1"就表示其符号为"―"。这种表示带符号数的方法法就是原码表示法。
反码比原码复杂一些,它规定若一个数值为正,则它的反码和原码形式相同。如+1仍写成"00000001";若一个数值为负,则反码的符号位为1,其余各位对原码取反。如-1写成"11111110";这两种方法在计算机中很少采用,原因很简单,原码和反码不便于运算。举个例子:用原码计算-1+1=?
问题似乎不难,但需要考虑的事情很多。假如只是简单地在"10000001"的最低位加上1,那么将得到结果--10000010,根据原码的规定,这个结果是-2。
要想得到正确结果,我们必须首先要考虑将符号位置0,同时最低位也不能加1,而要减1。即使采用反码计算,也要单独处理其符号。这样计算不仅对我们自己,就是对CPU来说也是不方便的。因此,多数机器都采用补码表示法。
在补码表示法中对于负数的表达要比反码麻烦一些,负数X用"2n-|X|"表示,其中"n"是数的位数。对于八位二进制数来讲n=8,因此用八位二进制补码表示-1就是28-1=11111111,也就是十六进制数0FFH。正数的表示方法和原码一样,+1也写成"00000001"。
由此我们可以发现正负数之间具有这样一种转换关系:将+1的所有位取反得到"11111110",再在最低位上加1就得到"11111111",也就是-1。同时我们也能看出补码表示法中关于符号位的规定和原码是一样的。
那么"10000001"在补码表示法中是哪个数呢?按照刚才发现的规律,将它的各个位取反,得"01111110",再加上1,得"01111111",即十进制的+127,也就是说"10000001"表示-127。
为什么要用这样的表示法,这主要是因为补码便于计算。我们可以用补码重新计算-1+1=?
由于-1的补码是"11111111",将其加1,会得到"100000000",这是一个九位二进制数,如果舍掉最高位,就得到正确的结果--00000000。
这似乎有点不讲理,凭什么舍去最高位呢?道理其实很简单。
将FF(-1)加1之后AL确实成了0。AL是八位寄存器,它不可以记录第九位,因而在AL寄存器中只保留了低八位。
那么是不是多出的一位就无影无踪了呢?并非如此,如果仔细观察DEBUG显示出的内容,就会发现标志寄存器中有一些位发生了变化:AF(辅助进位标志)和CF(借位/进位标志)被置成1了。
由于我们采用了八位寄存器,运算结果产生了第九位,这一位作为进位送入了CF标志位。至于AF,它记录了AL寄存器低"四"位的进位情况
那么是不是多出的一位就无影无踪了呢?并非如此,如果仔细观察DEBUG显示出的内容,就会发现标志寄存器中有一些位发生了变化:AF(辅助进位标志)和CF(借位/进位标志)被置成1了。
由于我们采用了八位寄存器,运算结果产生了第九位,这一位作为进位送入了CF标志位。至于AF,它记录了AL寄存器低"四"位的进位情况。
低四位产生进位的情况由AF反映出来。
采用补码表示法还有一个好处,它可以把加、减法统一成加法,很容易看出1-1和1+FF(-1)的实际结果是一样的。至于补码的乘除法运算这里不再多讲,查阅有关书籍即可掌握。
明白了数字的表示方法,那么我们在前面讨论的移位与乘除法的问题也就迎刃而解了。用"SHL/SHR"指令移位会使符号位发生变化,所以负数无法用这两条指令完成乘除计算。
实数就是有小数点的如:1.34 2.89 整数:1,3,413,455,不过我想知道你是要在那里表示的,如果是C++或C语言的话,实数要加 float duoble 整数int
计算机中用二进制数编码表示数值信息,8位二进制数,最高位代表符号位,“0”表示正数,“1”表示负数。整数用定点数来表示,实数用浮点数来表示。
数值信息在计算机内采用二进制编码表示,它有三种形式:原码、反码和补码。正数的编码,原码、反码、补码相同,对于负数其补码由反码加一得到。
定点数是指计算机中采用的一种数的表示方法。参与运算的数的小数点位置固定不变。浮点数是指,参与运算的数的小数点位置可变。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到。
扩展资料
浮点加法减法运算:
设有两个浮点数x和y,它们分别为
x = Mx*2^Ex
y = My*2^Ey
其中Ex和Ey分别为数x和y的阶码,Mx和My为数x和y的尾数。
两浮点数进行加法和减法的运算规则是
设 Ex小于等于Ey,则 x±y = (Mx*2^(Ex-Ey)±My)*2^Ey,
完成浮点加减运算的操作过程大体分为四步:
1. 0 操作数的检查;
2. 比较阶码大小并完成对阶;
3. 尾数进行加或减运算;
4. 结果规格化并进行舍入处理。
参考资料来源:《C++语言程序设计 (第4版)》郑莉 董渊 何江舟 编著 清华大学出版社 第1章 绪论 1.4 信息的表示与存储
参考资料来源:百度百科--定点数
参考资料来源:百度百科--浮点数
浮点数浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学记数法。浮点计算是指浮点数参与的运算,这种运算通常伴随着因为无法精确表示而进行的近似或舍入。一个浮点数a由两个数m和e来表示:a=m×b^e。在任意一个这样的系统中,我们选择一个基数b(记数系统的基)和精度p(即使用多少位来存储)。m(即尾数)是形如±d.dddddd的p位数(每一位是一个介于0到b-1之间的整数,包括0和b-1)。如果m的第一位是非0整数,m称作规格化的。有一些描述使用一个单独的符号位(s代表+或者-)来表示正负,这样m必须是正的。e是指数。由此可以看出,在计算机中表示一个浮点数,其结构如下:尾数部分(定点小数)阶码部分(定点整数)数符±尾数m阶符±阶码e这种设计可以在某个固定长度的存储空间内表示定点数无法表示的更大范围的数。例如,一个指数范围为±4的4位十进制浮点数可以用来表示43210,4.321或0.0004321,但是没有足够的精度来表示432.123和43212.3(必须近似为432.1和43210)。当然,实际使用的位数通常远大于4。此外,浮点数表示法通常还包括一些特别的数值:+∞和??∞(正负无穷大)以及NaN('NotaNumber')。无穷大用于数太大而无法表示的时候,NaN则指示非法操作或者无法定义的结果。众所周知,计算机中的所有数据都是以二进制表示的,浮点数也不例外。然而浮点数的二进制表示法却不像定点数那么简单了。先澄清一个概念,浮点数并不一定等于小数,定点数也并不一定就是整数。所谓浮点数就是小数点在逻辑上是不固定的,而定点数只能表示小数点固定的数值,具用浮点数或定点数表示某哪一种数要看用户赋予了这个数的意义是什么。C++中的浮点数有6种,分别是:float:单精度,32位unsignedfloat:单精度无符号,32位double:双精度,64位unsigneddouble:双精度无符号,64位longdouble:高双精度,80位unsignedlongdouble:高双精度无符号,80位(嚯,应该是C++中最长的内置类型了吧!)然而不同的编译器对它们的支持也略有不同,据我所知,很多编译器都没有按照IEEE规定的标准80位支持后两种浮点数的,大多数编译器将它们视为double,或许还有极个别的编译器将它们视为128位?!对于128位的longdouble我也仅是听说过,没有求证,哪位高人知道这一细节烦劳告知。下面我仅以float(带符号,单精度,32位)类型的浮点数说明C++中的浮点数是如何在内存中表示的。先讲一下基础知识,纯小数的二进制表示。(纯小数就是没有整数部分的小数,讲给小学没好好学的人)纯小数要想用二进制表示,必须先进行规格化,即化为1.xxxxx*(2^n)的形式(“^”代表乘方,2^n表示2的n次方)。对于一个纯小数D,求n的公式如下:n=1+log2(D);//纯小数求得的n必为负数再用D/(2^n)就可以得到规格化后的小数了。接下来就是十进制到二进制的转化问题,为了更好的理解,先来看一下10进制的纯小数是怎么表示的,假设有纯小数D,它小数点后的每一位数字按顺序形成一个数列:{k1,k2,k3,,kn}那么D又可以这样表示:D=k1/(10^1)+k2/(10^2)+k3/(10^3)++kn/(10^n)推广到二进制中,纯小数的表示法即为:D=b1/(2^1)+b2/(2^2)+b3/(2^3)++bn/(2^n)现在问题就是怎样求得b1,b2,b3,……,bn。算法描述起来比较复杂,还是用数字来说话吧。声明一下,1/(2^n)这个数比较特殊,我称之为位阶值。例如0.456,第1位,0.456小于位阶值0.5故为0;第2位,0.456大于位阶值0.25,该位为1,并将0.45减去0.25得0.206进下一位;第3位,0.206大于位阶值0.125,该位为1,并将0.206减去0.125得0.081进下一位;第4位,0.081大于0.0625,为1,并将0.081减去0.0625得0.0185进下一位;第5位0.0185小于0.03125……最后把计算得到的足够多的1和0按位顺序组合起来,就得到了一个比较精确的用二进制表示的纯小数了,同时精度问题也就由此产生,许多数都是无法在有限的n内完全精确的表示出来的,我们只能利用更大的n值来更精确的表示这个数,这就是为什么在许多领域,程序员都更喜欢用double而不是float。float的内存结构,我用一个带位域的结构体描述如下:structMYFLOAT{boolbSign:1;//符号,表示正负,1位charcExponent:8;//指数,8位unsignedlongulMantissa:23;//尾数,23位};符号就不用多说了,1表示负,0表示正指数是以2为底的,范围是-128到127,实际数据中的指数是原始指数加上127得到的,如果超过了127,则从-128开始计,其行为和X86架构的CPU处理加减法的溢出是一样的。比如:127+2=-127;-127-2=127尾数都省去了第1位的1,所以在还原时要先在第一位加上1。它可能包含整数和纯小数两部分,也可能只包含其中一部分,视数字大小而定。对于带有整数部分的浮点数,其整数的表示法有两种,当整数大于十进制的16777215时使用的是科学计数法,如果小于或等于则直接采用一般的二进制表示法。科学计数法和小数的表示法是一样的。小数部分则是直接使用科学计数法,但形式不是X*(10^n),而是X*(2^n)。拆开来看。0000000000000000000000000000000符号位指数位尾数位
计算机中,"Z"表示整数"R"表示实数实数包括有理数和无理数。其中无理数就是无限不循环小数,有理数就包括整数和分数。数学上,实数直观地定义为和数轴上的点一一对应的数。本来实数仅称作数,后来引入了虚数概念,原本的数称作“实数”——意义是“实在的数”。实数可以分为有理数和无理数两类,或代数数和超越数两类,或正数,负数和零三类。实数集合通常用字母R或R^n表示。而R^n表示n维实数空间。实数是不可数的。实数是实分析的核心研究对象。实数可以用来测量连续的量。理论上,任何实数都可以用无限小数的方式表示,小数点的右边是一个无穷的数列(可以是循环的,也可以是非循环的)。在实际运用中,实数经常被近似成一个有限小数(保留小数点后n位,n为正整数)。在计算机领域,由于计算机只能存储有限的小数位数,实数经常用浮点数来表示。整数(Integer)序列…,-2,-1,0,1,2,…中的数称为整数.整数的全体构成整数集,整数集合是一个数环。在整数系中,自然数为正整数,称0为零,称-1,-2,-3,…,-n,…(n为整数)为负整数.正整数,零与负整数构成整数系.正整数是从古代以来人类计数(counting)的工具.可以说,从「一头牛,两头牛」或是「五个人,六个人」抽象化成正整数的过程是相当自然的.事实上,我们有时候把正整数叫做自然数(thenaturalnumbers).零不仅表示「无」,更是表示空位的符号.中国古代用算筹计算数并进行运算时,空位不放算筹,虽无空位记号,但仍能为位值记数与四则运算创造良好的条件.印度-阿拉伯命数法中的零(zero)来自印度的(sunya)字,其原意也是「空」或「空白」.
推荐你本书《编码:隐匿在计算机软硬件背后的语言》自己研究吧。
正整数用二进制表示。
如果想表示负数,首先规定数的范围。假设原来用三个十进制数字储存000~999,共1000个正数。现在改成0~499意义不变,用999表示-1,用998表示-2,以此类推,500~999对应-500~-1。原因是,计算机“认为”000-001=999, 999+001=000
实数用浮点数表示,实际也就是二进制的科学记数法,任何一个数可以表示成类似
1.xxxxx *2^(yyy)这种形式,然后将xxxxx与yyy拼在一起储存。这么做的好处是表示的范围很大,而且实数的精度不受实数位数的影响,不会数越小,相对精度越低
这个问题并不复杂,表示一个带符号的整数常用的方法有三种:原码、反码表示法和补码表示法。先来看看原码表示法。在计算机中,数的符号是用一个数位来表示的,一般用数的最高位。正号用0表示,负号用1表示。
机器数的三种表示形式
由于计算机中符号和数字一样,都念铅物必须用二进制数串来表示。因此,正负号也必须用0、1来表示。用最高位0表示正、1表示负,这种正负号数字化的机内表示形式就称为“机器数”,而相应的机器外部用正负号表示的数称为“真值”,将一个真值表示成二进制字串的机器数的过程就称为编码。计算机中用...
计算器上面的字母都是表示什么
可用(CE)键消去一个数值,根号(√)键默认是开二次方根,只有科学计算器才能开多次方根。(+\/-)键可改变数字的正负值。ON\/AC:上电\/全清键,按下该键表示上电,或清除所有寄存器中的数值。(all clear) AC:清除键,在数字输入期间,第一次按下此键将清除除存储器内容外的所有数值。部分...
电脑上怎么打出正负号±
1、安装了搜狗输入法后,我们使用搜狗输入法输入“正负”,就可以看到自动出现±这个选项,我们点击它即可 2、当然我们还可以右键点击选择搜狗输入法桌面悬浮窗,然后点击选择表情,符号 3、然后我们选择特殊符号就可以打开搜狗特殊符号框了 4、然后我们点击选择数学,单位这一个选项就可以看到±号了,我们...
计算机原码反码补码怎么算
计算机中,并没有原码和反码,只是使用补码,代表正负数。使用补码的意义:可以把减法或负数,转换为加法运算。从而简化计算机的硬件。--- 比如钟表,时针转一圈,周期是 12 小时。倒拨 3 小时,可以用正拨 9 小时代替。9,就称为-3 的补数。计算方法:12-3 = 9。对于分针,倒拨 X 分,...
小学生计算器每个键是什么意思
(MR) 记忆恢复键 功能:取出存储值 (M-)记忆减法键 功能:当前显示值与存储值相减并保存 (M+)记忆加法键 功能:把目前显示的值放在存储器中,中断数字输入 (0-9) 0-9 字符键 功能:按钮分别为输入数字0-9 字符键 (.) 小数点字符键 功能:钮用来输入小数点 (+\/-) 正负键 ...
计算器上的M+,M-是怎么用啊?
M-就是在原有存储信息的基础上进行减法运算。M+、M-键可以分别记忆每次运算后的结果,MR键可以显示记忆的最后结果。M就是memory的简写, 意为储存即为最后一步存储的信息。使用方法:(1) 输入需要记忆储存的数据(例如为"40"), 点击"M+", 此时, 该数据已经被储存至计算储存单元中;(2) 键入新的...
x√y在计算器上表示什么意思
2、直接输入数字后,按下乘号将它变为乘数,在不输入被乘数的情况下直接按(=)键,就是该数字的二次方值。3、根号(√)键默认是开二次方根,只有科学计算器才能开多次方根。4、按下(+/-)键可改变数字的正负值。机械计算器 机械计算器是用实体键盘输入数字和运算符号,用机械零件运算的计算...
原码,反码,补码的编码规则?
计算机中,使用 1、0 构成各种代码。对于正负数字,只是使用【补码】来存储与计算。原码反码,在计算机中,都是不存在的。补码的编码规则如下:十进制数字 0,其补码就是:0000 0000。-1,就是“零减一”,即:0000 0000-1。用二进制减法计算,可得:(1) 1111 1111。机器数,只有 8 位,即:...
数控机床的正负数和小数点怎么算
小数点是以毫米为单位记数的。正负指的是坐标方向,例如:x-20.15指机床刀具往x负方向移动到-20.15mm的位置。
求0.1011和-10110的原码、反码、补码
-10110的原码为110110;反码为101001;补码为101010。0.1011的原码为01011;反码为01011;补码为01011。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。
运怀喘安:[答案] 这个问题并不复杂,表示一个带符号的整数常用的方法有三种:原码、反码表示法和补码表示法.先来看看原码表示法.在计算机中,数的符号是用一个数位来表示的,一般用数的最高位.正号用0表示,负号用1表示.所谓原码,就是简单地遵循这一规定...
包河区19129787019: 在计算机中,整数的正,负号是怎么表示的 - ?
运怀喘安:[答案] 印象中是补码的第一位,0代表正,1代表负,好像是大3的时候学的
包河区19129787019: 在PC机中,原码,补码,反码,正数,负数,正整数,负整数之间是如何表示的? - ?
运怀喘安:[答案] 原码表示:将符号位数码化了的数,其中“+”用0表示,“-”用1表示.反码表示:正数的反码表示与原码表示一样;负数的反码表示是原码表示的符号位不变,数值位逐位取反.补码表示:正数的补码表示与原码表示一样;负数的...
包河区19129787019: 计算机语言二进制数,正负号怎么表示 - ?
运怀喘安:[答案] 看二进制数左数第一位(即最高位): 用0表示非负数, 用1表示负数, 负数通常不用原码表示,而是用补码来表示原码, 负数原码的补码是原码的符号位不变,其余位按位取反再加1所得 希望我的回答对你有所帮助,祝学习愉快.
包河区19129787019: 计算机基础判断题整数在计算机中的表示常用最高位作为其符号位,用"1"表示"+"(正数),"0"表示" - "(负数),其余各位则用来表示数值的大小... - ?
运怀喘安:[答案] 整数在计算机中的表示常用最高位作为其符号位,用"1"表示"+"(正数),"0"表示"-"(负数),其余各位则用来表示数值的大小 这道题里没有强调计算机内部补码问题,所以和具体编码无关,当然计算机里都是用补码来进行运算的. 题目...
包河区19129787019: 有符号整数在计算机内的用什么表示符号位 - ?
运怀喘安: 有符号整数在计算机内,用最高位的二进制值表示符号位,最高位为0表示正数,最高位为1表示负数.
包河区19129787019: 二进制的正负怎么表示? - ?
运怀喘安: 针对第一个问题:对.任何数在内存中都是以补码的形式存在(其中正整数:原码=反码=补码;负整数:原反码=原码(最高位不变,其余按位取反);补码=反码+1).针对第二个问题: 如果不满八位,系统肯定是补足八位. 对于正整数而言,最高位全部填满0. 对于负整数而言,按照“原反码=原码(最高位不变,其余按位取反);补码=反码+1”原则发生变化: 比如-5的存储:【因为-5表示是:1000 0101(原码)=>1111 1010(反码)=> 1111 1011(补码,存储的就是这个)】
包河区19129787019: 计算机中有符号的正数用什么表示,负号用什么表示? - ?
运怀喘安: 补码:正数的符号是 0、负数的符号是 1. 移码:正数的符号是 1、负数的符号是 0. 这些小事,其实,你可以自己规定的.
包河区19129787019: 正数和负数该如何表示? - ?
运怀喘安:[答案] 正数: 大于0的数.若一个数x>0,则称它是一个正数.正数的前面可以加上正号(即加号)“+”来表示,但在前面没有数时正号通常省略不写.正数有无数个,其中分正整数和正分数. 负数: 比零小(