二进制中,数值最高位的超前进位加法器与符号位的超前进位加法器有什么区别,举例说明下

带符号的8位2进制数为什么最小是-128?_百度知道
带符号的8位2进制数为什么最小是-128?
带符号的8位2进制数去除符号位表示数值的只有7位。7位2进制数最大为:。现首位加上符号位:正数,负数7这是源码。想不通怎么最小的为-128.和源、反、补有什么关系。再怎么变正数最大为127,负书最小也应该为:-127呀!请大家指点一下,看我思路那里有问题。比较急 谢谢啊!
那请问这是人为规定的吗?规定为-128。
提问者采纳
楼上的说(估计是copy过来的),这么多,我估计楼主也不明白!我给你简单讲一下吧:7位2进制数000 0000的值为0,那么,它前面加上0,还表示0吧?那好,如果它前面加上1呢,仍然表示0?这不是重复了么?一个0,怎么用两个值来表示呢?所以就表示-128啦
提问者评价
其他类似问题
2进制的相关知识
其他2条回答
1、在计算机系统中,数值一律用补码来表示(存储)。 主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。 2、补码与原码的转换过程几乎是相同的。 数值的补码表示也分两种情况: (1)正数的补码:与原码相同。 例如,+9的补码是。 (2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。 例如,-7的补码:因为是负数,则符号位为“1”,整个为;其余7位为-7的绝对值+7的原码0000111按位取反为1111000;再加1,所以-7的补码是。 已知一个数的补码,求原码的操作分两种情况: (1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。 (2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取反,然后再整个数加1。 例如,已知一个补码为,则原码是(-7):因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”;其余7位1111001取反后为0000110;再加1,所以是。 在“闲扯原码、反码、补码”文件中,没有提到一个很重要的概念“模”。我在这里稍微介绍一下“模”的概念: “模”是指一个计量系统的计数范围。如时钟等。计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”。例如:
时钟的计量范围是0~11,模=12。
表示n位的计算机计量范围是0~2(n)-1,模=2(n)。【注:n表示指数】
“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。任何有模的计量器,均可化减法为加法运算。 例如: 假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:
一种是倒拨4小时,即:10-4=6
另一种是顺拨8小时:10+8=12+6=6
在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替。 对“模”而言,8和4互为补数。实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特性。共同的特点是两者相加等于模。
对于计算机,其概念和方法完全一样。n位计算机,设n=8, 所能表示的最大数是,若再加1称为位),但因只有8位,最高位1自然丢失。又回了,所以8位二进制系统的模为2(8)。 在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。把补数用到计算机对数的处理上,就是补码。 另外两个概念一的补码(one's complement) 指的是正数=原码,负数=反码而二的补码(two's complement) 指的就是通常所指的补码。这里补充补码的代数解释:任何一个数都可以表示为-a=2^(n-1)-2^(n-1)-a;这个假设a为正数,那么-a就是负数。而根据二进制转十进制数的方法,我们可以把a表示为:a=k0*2^0+k1*2^1+k2*2^2+……+k(n-2)*2^(n-2)这里k0,k1,k2,k(n-2)是1或者0,而且这里设a的二进制位数为n位,即其模为2^(n-1),而2^(n-1)其二项展开是:1+2^0+2^1+2^2+……+2^(n-2),而式子:-a=2^(n-1)-2^(n-1)-a中,2^(n-1)-a代入a=k0*2^0+k1*2^1+k2*2^2+……+k(n-2)*2^(n-2)和2^(n-1)=1+2^0+2^1+2^2+……+2^(n-2)两式,2^(n-1)-a=(1-k(n-2))*2^(n-2)+(1-k(n-3))*2^(n-3)+……+(1-k2)*2^2+(1-k1)*2^1+(1-k0)*2^0+1,而这步转化正是取反再加1的规则的代数原理所在。因为这里k0,k1,k2,k3……不是0就是1,所以1-k0,1-k1,1-k2的运算就是二进制下的取反,而为什么要加1,追溯起来就是2^(n-1)的二项展开式最后还有一项1的缘故。而-a=2^(n-1)-2^(n-1)-a中,还有-2^(n-1)这项未解释,这项就是补码里首位的1,首位1在转化为十进制时要乘上2^(n-1),这正是n位二进制的模。不能贴公式,所以看起来很麻烦,如果写成代数式子看起来是很方便的。注:n位二进制,最高位为符号位,因此表示的数值范围-2^(n-1) ——2^(n-1) -1,所以模为2^(n-1)。上面提到的8位二进制模为2^8是因为最高位非符号位,表示的数值范围为0——2^8-1。
楼上得 得补充说明下2进制正负 计算机硬件得判断是用补码这个补码是为了方便计算至于怎么用 你不需要明白,就不做解释了这个取补给你说明下 是个整数吧他的负数就是他的补码就是全部取反(能明白吗? 上面那个就变成101010)然后在+1变成101011这就是他的补码也就是=-21那么你看看1000000得反补码-1然后取反0000实际上溢出了1位因为第一位为标志位但是因为同时出现1000000 和0000000两个0 所以计算机认为1000000是-128得反补码
也就是楼上得那个意思我就是给楼上补充下呵呵这个补码要不怕你看不懂
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
阅读(451)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'有符号数和无符号数',
blogAbstract:'&&&&有符号数和无符号数 1. 无符号数和有符号数的理解&&&&& 有符号数和无符号数是属于数据类型的限定.&&&&& 所以从高级语言角度,可以看到的是其取值范围的区别。&&&&& 而在最低层其实给定位数的二进制数可以按有符号数去理解,也可以按照无符号数去理解,没有本质区别,只是对应数据表示的定义不同,从而得到的值不同。&&&&& 比如:&&&&& 八位的二进制\"\" ==& 如果按照无符号整数理解,则值为255;若按照有符号数理解则为-1。',
blogTag:'无符号数,sar,sal',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:5,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}1、原码、反码、补码知识的复习:
三者的最高位均为符号位。我以前一直没弄明白的是为何8位补码的表示范围是-128~127,今天查阅了相关资料,于此记下。
仍然以8位为例:
原码的表示范围:-127~-0,+0~+127,共256个数字。正0的原码是,负0的原码是:,有正0负0之分,不符合人的习惯,待解决。
反码:除符号位,原码其余位取反而得。+0:,-0:仍然有正0负0之分。
补码:在反码的基础上加1而得。对原码的两种0同时末位加1。+0:,-0:(因为溢出导致8位全0)。消除了正0负0之别,如此一来,便节省出一个数值表示方式,不能浪费,用来表示-128。-128特殊之处在于没有相应的反码原码。也可以这样考虑:
-2: & (在-1的基础上减1,直接将补码减1即可)
-3: & (在-2补码基础上减1,以下类似)
如此以来:8位补码表示范围是-128~+127因为0只有一种形式所以,仍然是256个数,若8位代表无符号数,则表示范围是:0~255,这就是为什么高级语言讲到数据类型,比如C++中的short类型时(16位长)说其表示范围是:-3,而unsigned short表示的范围则是:0~65535
2、关于无符号数和有符号数:
无符号数及有符号数的定义就不多说了,任何计算机基础书籍都会讲到。
二者的区别:我们知道,有符号数在计算机中以补码的形式存储,无符号数其实就是正数,三码一致,存储形式即是其十进制真值对应的二进制数。所以可以这样说,无论有符号数还是无符号数,都是以补码(相对真值来说)的形式来存储的,补码在运算是符号位也会参与。
其实对计算机来说,它根本没有所谓的无符号有符号这样的约定机制,无符号有符号只不过是我们(程序员、学习者)看待二进制数据的方式,比如,对于16位的寄存器(比如ax)有符号数-1的存储形式是0FFFFH(即16个1,-1的补码,最高位符号位),而同时无符号数65535的存储形式也是0FFFFH。所以对计算机来说,它仅仅是存储了一串二进制,至于是有符号数还是无符号,你程序员要心中有数。C++代码举例:
short a=-1;
unsigned short b=a;
cout&&a&&//打印有符号数-1,对应存储形式0FFFFH
cout&&b&&//打印无符号数65535对应存储形式0FFFFH
3、汇编相关
已经说过,数据以补码形式存储于计算机中(有符号、无符号),自然,寄存器,比如ax,存的也是补码,比如:mov ax,-96,查看便知ax存储的是0FA0H。在高级语言编程中,我们完全不用考虑什么原码补码。汇编的add指令在运算时,比如
它不去&考虑&什么有符号无符号,反正数据都以补码(无符号数据便是正数,补码不变)的形式存储、运算,它只管将al中的补码与99的补码加一起然后存入al中(补码的运算特点是:符号位也参与运算),我们知道运算后al存储的是(0FFH),至于你如何看待这个结果,由你程序员控制,你看成有符号数它便是-1,看成无符号数它便是255。
与此同时,相关的寄存器也会有相应的机制,来配合编程人员。比如标志寄存器中的SF标志位,如果编程人员将数据看成无符号数,则我们SF对我们是毫无意义的&&尽管对我们毫无意义,但计算机依然以&有符号数&的态度来&看待&参与运算和存储的数据,比如
add ax,-18
结果为负,sf=1(结果如果为非负,则sf=0)
计算机不管编程人员以什么眼光(有符号无符号)来看待数据,反正它把所有的可能都考虑到了,把相应的工作也做了,编程人员可按需而来。不妨想象一种情景:假如计算机完全以无符号数来看待数据,压根没有sf标志位,那么如果程序员想知道某数据的正负(以有符号数来看待数据)时,便无从下手了。
可以说,计算机仁至义尽,剩下的便是程序员的事了。
4、汇编中的CF、OF、SF标志位及cmp操作
CF对无符号数运算是有意义的,OF,SF对有符号数而言是有意义的。ZF则都适用。
一个是进位借位标志位一个是溢出标志位,溢出是指:在进行有符号数运算时,结果超过了机器所有表示的范围(五爽《汇编语言》),可知,OF只对有符数运算有意义,无符号数不关心这种溢出。无符号数关心的是最高位向更高位借位进位问题。(从这个层面上来讲,其实也可将这种向更高位借位进位看成无符号数的&溢出&)。所以CF只对无符号数的运算有意义,即当考虑CF标志位的时候要做到心中有数:现在参与运算的都是无符号数&&这依然是程序员的事。
可能会有这样的疑问:两个数运算,如果溢出了,那么以&无符号的眼光&看来,不也是产生了借位或者进位吗?或者反之,两个数运算,如果进位或者借位了,那么以&有符号的眼光&看来,不也是产生了溢出吗?
对于第一个问题:不一定,比如00 0001,看成有符号数运算的话,结果明显溢出,但如果看作无符号的运算的话并没有向更高位(无符号数无符号位,均为数值位)进位。
又如:mov al,98 add al,99(即10 0011)运算后CF=0,OF=1。具体的过程可以这样考虑:
首先,用的是al来运算,所以计算机知道做的是8位运算,加得结果:,对于无符号来说无进位,CF=0,对于有符号来说溢出了:OF=1.
对于第二个问题:也不一定。如:
mov al,0F0H
add al,88H执行后CF=1,OF=1,但是,请看另一例:
mov al,0F0H
add al,78H
对于0F0H和78H,首先要明白,如果看作无符号数,则便是240+120,明显会在高位向更高位产生进位,所以CF=1,如果看作有符号数,作为人类的程序员,有两种方式可以判定是否溢出:
a、将0F0H和78H(补码)转换成10进制数值(按照符号位不变其余位取反然后末位加1转成原码,再求),相加看是否在-128~127之内。也可按补码求真值的公式直接求出补码对应的真值:真值x=-2^n*xn+其余各位2进制对应真值。其中xn为最高位即符号位,为0或者1。
b、单符号判溢出方法:这是组成原理(白中英主编第4版)介绍的判断溢出的方法,补码相加,看符号位及最高有效位。将16进制的补码转换成2进制:和,相加:
可看出最高有效位有符号位均产生了进位,这种情况不视为溢出(只有二者之一产生进位时才算溢出)。
有符号数的溢出问题引发了cmp操作的相关问题。
cmp是比较指令,相当于减法,但不会将结果保存在目的操作数中,但会影响标志位sf,zf,cf。利用它既可以对无符号数比较也可以对有符号数进行比较。至于是有符号数还是无符号数,这依然取决于我们的看待方式,如:
看成无符号数分析:因为无须借位,cf=0(据此可以判断ax&bx),因为结果不为0,zf=0(据此可以判断ax bx是否相等)
对于有符号数,情况要复杂一些,因为牵扯到了溢出问题。
比如已知(ah)=22H,(bh)=0A0H,二者都是补码,一个为正一个为负,二者对应的真值分别为:34和-96,逻辑上讲(ah)&(bh),但cmp ah,bh运算时会溢出:34-(-96)=-230,小于-128。另外,我们可以直接用16进制减法手动计算结果:
82H,即,知结果为-1*2^7+2=-126,这显然是个错误的结果。计算机不会进行减法,它得转成加法。用补码加法计算有个好处,可用上边已经介绍过的单符号位判溢出方法判断结果是否溢出。过程:x补=22H=,y补=,求x补-y补,这是补码减法,转换成加法:x补-y补=x补+[-y]补,由y补求[-y]补:包括符号位全部取反,然后末位加1(参照白中英组成原理课本相关内容),转变后即为:10 0000,由单符号位判溢出方法可知,只有高位有效位产生了进位,进给了符号位,这是一个溢出,一个上溢。
要注意的是:引入补码带来的便处之一使得负数的加法转成补码的加法(负数的加法便是减法),但是如果不加控制补码之间也会进行减法,此时也要将相应的减法转成加法运算,当然这种转换的工作不是我们所做的,转换的原理如上所述。
因为溢出问题,导致上面cmp结果为负,sf=1,如果仅据此就说(ah)&(bh)明显是错误的,此时还要结合of位,因为有溢出,所以of=1(如果of等于0,说明没有溢出,则我们可以放心地使用sf来判断)。一条规律是:有溢出,则cmp结果与of表示的相反,本来打算验证一下,还是算了,抱着复习相关知识的心态,写了这么多,蛋疼。
阅读(...) 评论()二进制数_百度百科
收藏 查看&二进制数
是计算技术中广泛采用的一种二进制数据是用0和1两个数码来表示的数它的为2进位规则是逢二进一借位规则是借一当二数binaries是逢2进位的01是基本算符计算机运算基础采用二进制的基础是二进制在早期设计的常用的进制主要是因为我们有十个手指所以十进制是比较合理的选择用手指可以表示十个数字0的概念直到很久以后才出现所以是1-10而不是0-9出现以后使用来表示十种状态过于复杂所以所有的电子计算机中只有两种基本的状态开和关也就是说电子管的两种状态决定了以电子管为基础的电子采用二进制来表示数字和数据常用的进制还有8进制和16进制在电脑科学中经常会用到16进制而十进制的使用非常少这是因为16进制和二进制有天然的联系4个二进制位可以表示从0到15的数字这刚好是1个16进制位可以表示的数据也就是说将二进制转换成16进制只要每4位进行转换就可以了的直接可以转换成16进制的28字节是电脑中的基本存储单位根据计算机字长的不同字具有不同的现代电脑的字长一般是32位的也就是说一个字的位数是32字节是8位的一个字节可以表示0-255的十进制数据对于32位字长的现代电脑一个字等于4个字节对于早期的16位的电脑一个字等于2个字节外文名Binary number识&&&&别内存
1如果一个二进制数整型数的第零位的值是1那么这个数就是而如果该位是0那么这个数就是
2如果一个二进制数的低端n位都是零那么这个数可以被2n
3如果一个二进制数的第n位是一而其他各位都是零那么这个数等于2^n
4如果一个二进制数的第零位到第n - 1位都是1而且其他各位都是0那么这个数等于2^n - 1
5将一个二进制数的所有位左移移位的结果是将该数乘以二
6将一个无符号二进制数的所有位右移一位的结果等效于该数除以二这对有符号数不适用会被下舍入rounddown)
7将两个n位的二进制数相乘可能会需要2*n位来保存结果
8将两个n位的二进制数相加或者相减绝不会需要多于n 1位来保存结果
9将一个二进制数的所有位取反就是将所有的一改为零所有的零改为一等效于将该数取负改变符号再将结果减一
10将任意给定个数的位表示的最大无符号二进制数加一的结果永远是零
11零递减减一的结果永远是某个给定个数的位表示的最大无符号二进制数
12n位可以表示2n个不同的组合
13数2年包含n位所有位都是一二进制数的运算除了有外还可以有
下面分别予以介绍
二进制数的四则运算
二进制数与十进制数一样同样可以进行加减乘除四则运算其算法规则如下
加运算0 0=00 1=11 0=11 1=10#逢2进1
减运算1-1=01-0=10-0=00-1=1#向高位借1当2
乘运算0×0=00×1=01×0=01×1=1#只有同时为1时结果才为1
除运算二进制数只有两个数01因此它的商是1或0
0+0=00+1=1+0=11+1=10
0-0=01-0=11-1=00-1=-1=1010
0×0=00×1=1×0=01×1=1
0÷1=01÷1=1
只有0和1两个数码为二如下
1首先是最右数码位相加这里和被加数的最后一位分别为0和1根据原则可以知道相加后为1
2再进行倒数第二位相加这里和被加数的倒数第二位都为1根据原则可以知道相加后为102此时把后面的0留下而把第一位的1向高一位进1
3再进行倒数第三位相加这里和被加数的倒数第二位都为0根据原则可以知道本来结果应为0但倒数第二位已向这位进1了相当于要加被加数加数和进位这三个数的这个数码位所以结果应为0 1=1
4最后最高位相加这里和被加数的最高位都为1根据加法原则可以知道相加后为102一位只能有一个数字所以需要再向前进1本身位留下0这样该位相加后就得到0而新的最高位为11首先最后一位向倒数第二位借1相当于得到了102也就是相当于十进制数中的2用2减去1得1
2再计算倒数第二位因为该位同样为0不及1大需要继续向倒数第三位借1同样是借1当2但因为它在上一步中已借给了最后一位1此时是真实的1则倒数第二位为1与减数1相减后得到0
3用同样的方法倒数第三位要向它们的上一位借1同样是当2但同样已向它的下一位倒数第二位借给1此时也是真实的1所以最终得值也为0
4的倒数第四位尽管与前面的几位一样也为0但它所对应的减数倒数第四位却为0而不是前面几位中对应的1它向它的高位倒数第五位借1相当于2后在借给了倒数第四位1真实的1后仍有1余1 –0=1所以该位结果为1
5的倒数第五位原来为1但它借给了倒数第四位所以最后为0而此时减数的倒数第五位却为1这样被减数需要继续向它的高位倒数第六位借1相当于22–1=1
6的最后一位本来为1可是借给倒数第五位后就为0了而减数没有这个位这样结果也就是被减数的相应位值大小此处为0
在二进制数的加运算中一定要联系上的加减法运算方法其实它们的道理是一样的也是一一对应的在的加法中进1仍就当1在二进制数中也是进1当1在减法中我们向高位借1当10在二进制数中就是借1当2而被借的数仍然只是减少了1这与十进制数一样把二进制数中的0和1全部当成是中的0和1即可根据中的乘法运算知道任何数与0相乘所得的积均为0这一点同样适用于二进制数的乘法运算只有1与1相乘才等于1乘法运算步骤
1首先是乘数的最低位与的所有位相乘因为乘数的最低位为0根据以上原则可以得出它与被乘数11102的所有位相乘后的结果都为0
2再是乘数的倒数第二位与的所有位相乘因为乘数的这一位为1根据以上原则可以得出它与被乘数11102的高三位相乘后的结果都为1而于最低位相乘后的结果为0
3再是乘数的倒数第三位与的所有位相乘同样因为乘数的这一位为1处理方法与结果都与上一步的倒数第二位一样不再赘述
4最后是乘数的最高位与的所有位相乘因为乘数的这一位为0所以与被乘数11102的所有位相乘后的结果都为0
5然后再按照前面介绍的二进制数加法原则对以上四步所得的结果按位相加与的乘法运算方法一样结果得到11102×01102=101010021首先用1作为商试一下相当于用1乘以除数110然后把所得到的各位再与的前4位1001相减按照减法运算规则可以得到的余数为011
2因为011与110相比不足以被除所以需要向低取一位最终得到0111此时的数就比除数110大了可以继续除了同样用1作为商去除相当于用1去乘除数110然后把所得的积与被除数中当前四位0111相减根据以上介绍的运算规则可以得到此步的余数为1
3因为1要远比除数110小向前取一位后为11仍不够110除所以此时需在商位置上用0作为商了
4然后在上继续向前取一位得到110此时恰好与110完全一样结果当然是用1作为商用它乘以除数110后再与被除数相减得到的余数正好为0证明这两个数能够整除
这样一来所得的商11012就是两者相除的结果ASCII码就是被普遍采用的一个英文字符信息编码方案它用8位二进制数表示各种字母和符号例如
表示A 表示B
8个二进制位称为一个字节Byte代号为B字节是最基本的信息储存单位一个字节可以储存一个英文字母或符号编码两个字节可以储存一个汉字编码
同二进制数一样二进制编码也是计算机内部用来表示信息的一种手段人们平时和计算机打交道时根本不用理它我们仍然用人们习惯的方式输入或者输出信息期间的转换则由计算机自动去完成
计算机中一个存储单位即一个字节里存放的究竟是二进制数还是二进制编码是英文是汉字事实上它们都由程序进行识别例如表示英文字符的8位二进制编码的最高位是0而表示汉字两个8位二进制编码的最高位是1这一点就是程序区别存储单位里存放的是英文还是汉字的一个依据1980年中国为6763个常用汉字规定了编码称为信息交换用汉字编码字符集·基本集简称每个汉字占16位在Windows95/98/2000/XP简体中文版操作系统中使用的是汉字内码扩展规范简称每个汉字占16位它能表示20902个汉字Linux简体中文版操作系统中使用的是UTF-8编码大多数汉字占24位能表示7万多个汉字→二进制数注十进制数只有0到9
 16→10000
46→101110
99→1100011
注一般为了区别二进制数与再二进制数后加上一个B如145→B
通常我们所说的数字一般都是十进制10分就1角10角就1元……这些数字只是由十个数组成那就是0123456789[我们一般称之为(base)]
都是这些数但它们处于不同位置所代表的重量就不一样了哦如111都是1但就是不一样这就涉及到了的概念了可用以下实例来说明一个结4553.87可表示为
在这个数中有些相同的数字由于处在不同的位置它们代表的数值的大小也不同各位数字所代表的数值的大小是由位权来决定的位权是一个乘方值乘方的底数为的基数本例中为1 0 而指数由各位数字在数中的位置来决定以上的中从左至右各位数字的位权分别为10?10?10?10?一般而言在进位制中把一个数中各位数字为1时代表的数值大小称为位权如456它们的位权就是当各位为1时的数值大小456中的4的位权就是10(2),5的位权就是10(1),6的位权就是10(0).
除了位权对于进制记数的另一个重要概念就是基数基数很好理解就是中所使用的不同基本符号的个数称为该计数制的基数比如十进制就是1.2.3.4.5.6.7.8.9.0这十个数相对而言二进制就两个基数0和1,就是0.1.2.3.4.5.6.7,就是0.1.2.3.4.5.6.7.8.9.A.B.C.D.E.F
由上面两个概念可以得出以下公式[以下将详细说名]
N进制的就能表示为012……N-2N-1
N进制的权一般可以表示[X就是某数在它的中所处位置]
N进制展开成十进制公试如
十进制有10个基数0123456789逢十进一
二进制有2 个01逢二进一
八进制有8个01234567逢八进一
十六进制有16个基数0123456789ABCDEF逢十六进一
由于大家从小开始就学习十进制生活中用途更是广泛一种单一的数字思维模式使我们很多人以为就只有这么一种进制数.在以下给大家说说计算机中用得最多的进制数让大家开阔思维不要停留于一成不变的思维模式中
计算机中用得最多也是CPU唯一能认出的那就是二进制计算机是处理信息的机器信息处理的前提是信息的表示计算机内信息的表示形式是二进制数字编码也就是说各种类型的信息数值文字图像必须转换成即二进制数字编码的形式才能在计算机中进行处理那怕你移动一下鼠标按一下键盘你的每一个动作最后到了CPU那也就只剩0和1了有时觉得设计计算机的人也太厉害了就两个数字就能弄出这么完美的东西来这就是智慧的结晶其实说到底了CPU也就几百条指令而已在和系统的层层迭加下让我们根本就不了解计算机内部是什么样?其实没什么就是0和1两个状态而已二进制数只有0和1两个基本符号易于用两种对立的物理状态表示例如可用&1&表示电灯开关的闭合状态用0表示断开状态晶体管的导通表示1 截止表示0电容器的充电和放电电脉冲的有和无脉冲极性的正与负电位的高与低等一切有两种对立稳定状态的器件都可以表示二进制的0和1而有10个基本符号0123456789要用10种状态才能表示要用电子器件实现起来是很困难的二进制数的特别简单和仅各有3条运算规则 0+0=00+1=11+1=10和0×0=00×1=01×1=1 运算时不易出错[其实计算机处理时都是加法和移位并没有乘除法如11B左移一位就成了110B,11B是十进制的3而110B是6看看是不是等于乘二左移乘右移就除哈哈好玩吧]此外二进制数的1和0正好可与真和假相对应这样就为计算机进行逻辑运算提供了方便和逻辑运算是计算机的采用二进制可以简单方便地进行这两类运算虽然二进制有不少优点但毕竟我们日常生活中用的都是十进制为了能在日常生活中使用就有必要把它转换为十进制至于为什么用八进制和十六进制呢很简单就是因为它是2的2?=8,2?=16这样一来就便于二进制的计算和阅读
对于其它为十进制比较简单下面举例说明在计算机科学中二进制八进制十进制十六进制有这样是为了不混淆十进制一般在末尾加个字母D[一般习惯都不加]二进制加个B八进制加Q十六进制加H
例如123D1011B123QAB9H0.11D0.11B0.11Q0.11H
而十进制转换为其它进制就比较难办了哦但方法是有的而且不少方法在此介绍一种比较常用的便于大家掌握
十进制转换为二进制技巧
只能举例了文字说不清的通常将一个十进制数的整数部分和小数部分分开处理
采用基数具体步骤如下
1将给定的十进制整数除以基数2余数便是等值的二进制的最低位
2将上一步的商再除以基数2余数便是等值的二进制数的次低位
3重复步骤2直到最后所得的商等于0为止各次除得的余数便是二进制各位的数最后一次的余数是最高位
二进制与八进制十六进制转换技巧
二进制从最低位开始每三位转换为十进制即为其对应八进制
高位不足三位补零
同理二进制从最低位开始每四位转换为十进制即为其对应十六进制
高位不足四位补零
例如 1001100? = 114? = 4C??
新手上路我有疑问投诉建议参考资料 查看

我要回帖

更多关于 超前进位加法器 的文章

 

随机推荐