十进制正92的原码?反码?补码?

十进制正92的原码?反码?补码?,第1张

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:

[+1]原 = 0000 0001

[-1]原 = 1000 0001

反码的表示方法是:

正数的反码是其本身

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

[+1] = [00000001]原 = [00000001]反

[-1] = [10000001]原 = [11111110]反

补码的表示方法是:

正数的补码就是其本身

负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

[+1] = [00000001]原 = [00000001]反 = [00000001]补

[-1] = [10000001]原 = [11111110]反 = [11111111]补

92的二进制01011100 源码01011100 反码10100011 补码01011100

题目:打印出杨辉三角形(要求打印出10行如下图)

1.程序分析:

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

2.程序源代码

main()

{int i,j

int a[10][10]

printf("\n")

for(i=0i<10i++)

{a[i][0]=1

a[i][i]=1}

for(i=2i<10i++)

for(j=1j a[i][j]=a[i-1][j-1]+a[i-1][j]

for(i=0i<10i++)

{for(j=0j<=ij++)

printf("]",a[i][j])

printf("\n")

}

}

==============================================================

【程序62】

题目:学习putpixel画点。

1.程序分析:

2.程序源代码:

#include "stdio.h"

#include "graphics.h"

main()

{

int i,j,driver=VGA,mode=VGAHI

initgraph(&driver,&mode,"")

setbkcolor(YELLOW)

for(i=50i<=230i+=20)

for(j=50j<=230j++)

putpixel(i,j,1)

for(j=50j<=230j+=20)

for(i=50i<=230i++)

putpixel(i,j,1)

}

==============================================================

【程序63】

题目:画椭圆ellipse

1.程序分析:

2.程序源代码:

#include "stdio.h"

#include "graphics.h"

#include "conio.h"

main()

{

int x=360,y=160,driver=VGA,mode=VGAHI

int num=20,i

int top,bottom

initgraph(&driver,&mode,"")

top=y-30

bottom=y-30

for(i=0i{

ellipse(250,250,0,360,top,bottom)

top-=5

bottom+=5

}

getch()

}

==============================================================

【程序64】

题目:利用ellipse and rectangle 画图。

1.程序分析:

2.程序源代码:

#include "stdio.h"

#include "graphics.h"

#include "conio.h"

main()

{

int driver=VGA,mode=VGAHI

int i,num=15,top=50

int left=20,right=50

initgraph(&driver,&mode,"")

for(i=0i{

ellipse(250,250,0,360,right,left)

ellipse(250,250,0,360,20,top)

rectangle(20-2*i,20-2*i,10*(i+2),10*(i+2))

right+=5

left+=5

top+=10

}

getch()

}

==============================================================

【程序65】

题目:一个最优美的图案。

1.程序分析:

2.程序源代码:

#include "graphics.h"

#include "math.h"

#include "dos.h"

#include "conio.h"

#include "stdlib.h"

#include "stdio.h"

#include "stdarg.h"

#define MAXPTS 15

#define PI 3.1415926

struct PTS {

int x,y

}

double AspectRatio=0.85

void LineToDemo(void)

{

struct viewporttype vp

struct PTS points[MAXPTS]

int i, j, h, w, xcenter, ycenter

int radius, angle, step

double rads

printf(" MoveTo / LineTo Demonstration" )

getviewsettings( &vp )

h = vp.bottom - vp.top

w = vp.right - vp.left

xcenter = w / 2/* Determine the center of circle */

ycenter = h / 2

radius = (h - 30) / (AspectRatio * 2)

step = 360 / MAXPTS/* Determine # of increments */

angle = 0/* Begin at zero degrees */

for( i=0 irads = (double)angle * PI / 180.0/* Convert angle to radians */

points[i].x = xcenter + (int)( cos(rads) * radius )

points[i].y = ycenter - (int)( sin(rads) * radius * AspectRatio )

angle += step/* Move to next increment */

}

circle( xcenter, ycenter, radius )/* Draw bounding circle */

for( i=0 ifor( j=i jmoveto(points[i].x, points[i].y)/* Move to beginning of cord */

lineto(points[j].x, points[j].y)/* Draw the cord */

} } }

main()

{int driver,mode

driver=CGAmode=CGAC0

initgraph(&driver,&mode,"")

setcolor(3)

setbkcolor(GREEN)

LineToDemo()}

==============================================================

【程序66】

题目:输入3个数a,b,c,按大小顺序输出。

1.程序分析:利用指针方法。

2.程序源代码:

/*pointer*/

main()

{

int n1,n2,n3

int *pointer1,*pointer2,*pointer3

printf("please input 3 number:n1,n2,n3:")

scanf("%d,%d,%d",&n1,&n2,&n3)

pointer1=&n1

pointer2=&n2

pointer3=&n3

if(n1>n2) swap(pointer1,pointer2)

if(n1>n3) swap(pointer1,pointer3)

if(n2>n3) swap(pointer2,pointer3)

printf("the sorted numbers are:%d,%d,%d\n",n1,n2,n3)

}

swap(p1,p2)

int *p1,*p2

{int p

p=*p1*p1=*p2*p2=p

}

==============================================================

【程序67】

题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

1.程序分析:谭浩强的书中答案有问题。

2.程序源代码:

main()

{

int number[10]

input(number)

max_min(number)

output(number)

}

input(number)

int number[10]

{int i

for(i=0i<9i++)

scanf("%d,",&number[i])

scanf("%d",&number[9])

}

max_min(array)

int array[10]

{int *max,*min,k,l

int *p,*arr_end

arr_end=array+10

max=min=array

for(p=array+1p if(*p>*max) max=p

else if(*p<*min) min=p

k=*max

l=*min

*p=array[0]array[0]=ll=*p

*p=array[9]array[9]=kk=*p

return

}

output(array)

int array[10]

{ int *p

for(p=arrayp printf("%d,",*p)

printf("%d\n",array[9])

}

==============================================================

【程序68】

题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数

1.程序分析:

2.程序源代码:

main()

{

int number[20],n,m,i

printf("the total numbers is:")

scanf("%d",&n)

printf("back m:")

scanf("%d",&m)

for(i=0i scanf("%d,",&number[i])

scanf("%d",&number[n-1])

move(number,n,m)

for(i=0i printf("%d,",number[i])

printf("%d",number[n-1])

}

move(array,n,m)

int n,m,array[20]

{

int *p,array_end

array_end=*(array+n-1)

for(p=array+n-1p>arrayp--)

*p=*(p-1)

*array=array_end

m--

if(m>0) move(array,n,m)

}

==============================================================

【程序69】

题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出

圈子,问最后留下的是原来第几号的那位。

1. 程序分析:

2.程序源代码:

#define nmax 50

main()

{

int i,k,m,n,num[nmax],*p

printf("please input the total of numbers:")

scanf("%d",&n)

p=num

for(i=0i *(p+i)=i+1

i=0

k=0

m=0

while(m {

if(*(p+i)!=0) k++

if(k==3)

{ *(p+i)=0

k=0

m++

}

i++

if(i==n) i=0

}

while(*p==0) p++

printf("%d is left\n",*p)

}

==============================================================

【程序70】

题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。

1.程序分析:

2.程序源代码:

main()

{

int len

char *str[20]

printf("please input a string:\n")

scanf("%s",str)

len=length(str)

printf("the string has %d characters.",len)

}

length(p)

char *p

{

int n

n=0

while(*p!='\0')

{

n++

p++

}

return n

}

【程序71】

题目:编写input()和output()函数输入,输出5个学生的数据记录。

1.程序分析:

2.程序源代码:

#define N 5

struct student

{ char num[6]

char name[8]

int score[4]

} stu[N]

input(stu)

struct student stu[]

{ int i,j

for(i=0i { printf("\n please input %d of %d\n",i+1,N)

printf("num: ")

scanf("%s",stu[i].num)

printf("name: ")

scanf("%s",stu[i].name)

for(j=0j<3j++)

{ printf("score %d.",j+1)

scanf("%d",&stu[i].score[j])

}

printf("\n")

}

}

print(stu)

struct student stu[]

{ int i,j

printf("\nNo. Name Sco1 Sco2 Sco3\n")

for(i=0i{ printf("%-6s%-10s",stu[i].num,stu[i].name)

for(j=0j<3j++)

printf("%-8d",stu[i].score[j])

printf("\n")

}

}

main()

{

input()

print()

}

==============================================================

【程序72】

题目:创建一个链表。

1.程序分析:

2.程序源代码:

/*creat a list*/

#include "stdlib.h"

#include "stdio.h"

struct list

{ int data

struct list *next

}

typedef struct list node

typedef node *link

void main()

{ link ptr,head

int num,i

ptr=(link)malloc(sizeof(node))

ptr=head

printf("please input 5 numbers==>\n")

for(i=0i<=4i++)

{

scanf("%d",&num)

ptr->data=num

ptr->next=(link)malloc(sizeof(node))

if(i==4) ptr->next=NULL

else ptr=ptr->next

}

ptr=head

while(ptr!=NULL)

{ printf("The value is ==>%d\n",ptr->data)

ptr=ptr->next

}

}

==============================================================

【程序73】

题目:反向输出一个链表。

1.程序分析:

2.程序源代码:

/*reverse output a list*/

#include "stdlib.h"

#include "stdio.h"

struct list

{ int data

struct list *next

}

typedef struct list node

typedef node *link

void main()

{ link ptr,head,tail

int num,i

tail=(link)malloc(sizeof(node))

tail->next=NULL

ptr=tail

printf("\nplease input 5 data==>\n")

for(i=0i<=4i++)

{

scanf("%d",&num)

ptr->data=num

head=(link)malloc(sizeof(node))

head->next=ptr

ptr=head

}

ptr=ptr->next

while(ptr!=NULL)

{ printf("The value is ==>%d\n",ptr->data)

ptr=ptr->next

}}

==============================================================

【程序74】

题目:连接两个链表。

1.程序分析:

2.程序源代码:

#include "stdlib.h"

#include "stdio.h"

struct list

{ int data

struct list *next

}

typedef struct list node

typedef node *link

link delete_node(link pointer,link tmp)

{if (tmp==NULL) /*delete first node*/

return pointer->next

else

{ if(tmp->next->next==NULL)/*delete last node*/

tmp->next=NULL

else /*delete the other node*/

tmp->next=tmp->next->next

return pointer

}

}

void selection_sort(link pointer,int num)

{ link tmp,btmp

int i,min

for(i=0i {

tmp=pointer

min=tmp->data

btmp=NULL

while(tmp->next)

{ if(min>tmp->next->data)

{min=tmp->next->data

btmp=tmp

}

tmp=tmp->next

}

printf("\40: %d\n",min)

pointer=delete_node(pointer,btmp)

}

}

link create_list(int array[],int num)

{ link tmp1,tmp2,pointer

int i

pointer=(link)malloc(sizeof(node))

pointer->data=array[0]

tmp1=pointer

for(i=1i{ tmp2=(link)malloc(sizeof(node))

tmp2->next=NULL

tmp2->data=array[i]

tmp1->next=tmp2

tmp1=tmp1->next

}

return pointer

}

link concatenate(link pointer1,link pointer2)

{ link tmp

tmp=pointer1

while(tmp->next)

tmp=tmp->next

tmp->next=pointer2

return pointer1

}

void main(void)

{ int arr1[]={3,12,8,9,11}

link ptr

ptr=create_list(arr1,5)

selection_sort(ptr,5)

}

==============================================================

【程序75】

题目:放松一下,算一道简单的题目

1.程序分析:

2.程序源代码:

main()

{

int i,n

for(i=1i<5i++)

{ n=0

if(i!=1)

n=n+1

if(i==3)

n=n+1

if(i==4)

n=n+1

if(i!=4)

n=n+1

if(n==3)

printf("zhu hao shi de shi:%c",64+i)

}

}

==============================================================

【程序76】

题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数

1/1+1/3+...+1/n(利用指针函数)

1.程序分析:

2.程序源代码:

main()

#include "stdio.h"

main()

{

float peven(),podd(),dcall()

float sum

int n

while (1)

{

scanf("%d",&n)

if(n>1)

break

}

if(n%2==0)

{

printf("Even=")

sum=dcall(peven,n)

}

else

{

printf("Odd=")

sum=dcall(podd,n)

}

printf("%f",sum)

}

float peven(int n)

{

float s

int i

s=1

for(i=2i<=ni+=2)

s+=1/(float)i

return(s)

}

float podd(n)

int n

{

float s

int i

s=0

for(i=1i<=ni+=2)

s+=1/(float)i

return(s)

}

float dcall(fp,n)

float (*fp)()

int n

{

float s

s=(*fp)(n)

return(s)

}

==============================================================

【程序77】

题目:填空练习(指向指针的指针)

1.程序分析:

2.程序源代码:

main()

{ char *s[]={"man","woman","girl","boy","sister"}

char **q

int k

for(k=0k<5k++)

{ /*这里填写什么语句*/

printf("%s\n",*q)

}

}

==============================================================

【程序78】

题目:找到年龄最大的人,并输出。请找出程序中有什么问题。

1.程序分析:

2.程序源代码:

#define N 4

#include "stdio.h"

static struct man

{ char name[20]

int age

} person[N]={"li",18,"wang",19,"zhang",20,"sun",22}

main()

{struct man *q,*p

int i,m=0

p=person

for (i=0i{if(mage)

q=p++

m=q->age}

printf("%s,%d",(*q).name,(*q).age)

}

==============================================================

【程序79】

题目:字符串排序。

1.程序分析:

2.程序源代码:

main()

{

char *str1[20],*str2[20],*str3[20]

char swap()

printf("please input three strings\n")

scanf("%s",str1)

scanf("%s",str2)

scanf("%s",str3)

if(strcmp(str1,str2)>0) swap(str1,str2)

if(strcmp(str1,str3)>0) swap(str1,str3)

if(strcmp(str2,str3)>0) swap(str2,str3)

printf("after being sorted\n")

printf("%s\n%s\n%s\n",str1,str2,str3)

}

char swap(p1,p2)

char *p1,*p2

{

char *p[20]

strcpy(p,p1)strcpy(p1,p2)strcpy(p2,p)

}

==============================================================

【程序80】

题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只

猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了

一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,

问海滩上原来最少有多少个桃子?

1.程序分析:

2.程序源代码:

main()

{int i,m,j,k,count

for(i=4i<10000i+=4)

{ count=0

m=i

for(k=0k<5k++)

{

j=i/4*5+1

i=j

if(j%4==0)

count++

else

break

}

i=m

if(count==4)

{printf("%d\n",count)

break}

}

}

【程序81】

题目:809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。

1.程序分析:

2.程序源代码:

output(long b,long i)

{ printf("\n%ld/%ld=809*%ld+%ld",b,i,i,b%i)

}

main()

{long int a,b,i

a=809

for(i=10i<100i++)

{b=i*a+1

if(b>=1000&&b<=10000&&8*i<100&&9*i>=100)

output(b,i)}

}

==============================================================

【程序82】

题目:八进制转换为十进制

1.程序分析:

2.程序源代码:

main()

{ char *p,s[6]int n

p=s

gets(p)

n=0

while(*(p)!='\0')

{n=n*8+*p-'0'

p++}

printf("%d",n)

}

==============================================================

【程序83】

题目:求0—7所能组成的奇数个数。

1.程序分析:

2.程序源代码:

main()

{

long sum=4,s=4

int j

for(j=2j<=8j++)/*j is place of number*/

{ printf("\n%ld",sum)

if(j<=2)

s*=7

else

s*=8

sum+=s}

printf("\nsum=%ld",sum)

}

==============================================================

【程序84】

题目:一个偶数总能表示为两个素数之和。

1.程序分析:

2.程序源代码:

#include "stdio.h"

#include "math.h"

main()

{ int a,b,c,d

scanf("%d",&a)

for(b=3b<=a/2b+=2)

{ for(c=2c<=sqrt(b)c++)

if(b%c==0) break

if(c>sqrt(b))

d=a-b

else

break

for(c=2c<=sqrt(d)c++)

if(d%c==0) break

if(c>sqrt(d))

printf("%d=%d+%d\n",a,b,d)

}

}

==============================================================

【程序85】

题目:判断一个素数能被几个9整除

1.程序分析:

2.程序源代码:

main()

{ long int m9=9,sum=9

int zi,n1=1,c9=1

scanf("%d",&zi)

while(n1!=0)

{ if(!(sum%zi))

n1=0

else

{m9=m9*10

sum=sum+m9

c9++

}

}

printf("%ld,can be divided by %d \"9\"",sum,c9)

}

==============================================================

【程序86】

题目:两个字符串连接程序

1.程序分析:

2.程序源代码:

#include "stdio.h"

main()

{char a[]="acegikm"

char b[]="bdfhjlnpq"

char c[80],*p

int i=0,j=0,k=0

while(a[i]!='\0'&&b[j]!='\0')

{if (a[i] { c[k]=a[i]i++}

else

c[k]=b[j++]

k++

}

c[k]='\0'

if(a[i]=='\0')

p=b+j

else

p=a+i

strcat(c,p)

puts(c)

}

==============================================================

【程序87】

题目:回答结果(结构体变量传递)

1.程序分析:

2.程序源代码:

#include "stdio.h"

struct student

{ int x

char c

} a

main()

{a.x=3

a.c='a'

f(a)

printf("%d,%c",a.x,a.c)

}

f(struct student b)

{

b.x=20

b.c='y'

}

==============================================================

【程序88】

题目:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。

1.程序分析:

2.程序源代码:

main()

{int i,a,n=1

while(n<=7)

{ do {

scanf("%d",&a)

}while(a<1||a>50)

for(i=1i<=ai++)

printf("*")

printf("\n")

n++}

getch()

}

==============================================================

【程序89】

题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:

每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。

1.程序分析:

2.程序源代码:

main()

{int a,i,aa[4],t

scanf("%d",&a)

aa[0]=a

aa[1]=a0/10

aa[2]=a00/100

aa[3]=a/1000

for(i=0i<=3i++)

{aa[i]+=5

aa[i]%=10

}

for(i=0i<=3/2i++)

{t=aa[i]

aa[i]=aa[3-i]

aa[3-i]=t

}

for(i=3i>=0i--)

printf("%d",aa[i])

}

==============================================================

【程序90】

题目:专升本一题,读结果。

1.程序分析:

2.程序源代码:

#include "stdio.h"

#define M 5

main()

{int a[M]={1,2,3,4,5}

int i,j,t

i=0j=M-1

while(i {t=*(a+i)

*(a+i)=*(a+j)

*(a+j)=t

i++j--

}

for(i=0i printf("%d",*(a+i))

}

【程序91】

题目:时间函数举例1

1.程序分析:

2.程序源代码:

#include "stdio.h"

#include "time.h"

void main()

{ time_t lt/*define a longint time varible*/

lt=time(NULL)/*system time and date*/

printf(ctime(<))/*english format output*/

printf(asctime(localtime(<)))/*tranfer to tm*/

printf(asctime(gmtime(<)))/*tranfer to Greenwich time*/

}

==============================================================

【程序92】

题目:时间函数举例2

1.程序分析:

2.程序源代码:

/*calculate time*/

#include "time.h"

#include "stdio.h"

main()

{ time_t start,end

int i

start=time(NULL)

for(i=0i<3000i++)

{ printf("\1\1\1\1\1\1\1\1\1\1\n")}

end=time(NULL)

printf("\1: The different is %6.3f\n",difftime(end,start))

}

==============================================================

【程序93】

题目:时间函数举例3

1.程序分析:

2.程序源代码:

/*calculate time*/

#include "time.h"

#include "stdio.h"

main()

{ clock_t start,end

int i

double var

start=clock()

for(i=0i<10000i++)

{ printf("\1\1\1\1\1\1\1\1\1\1\n")}

end=clock()

printf("\1: The different is %6.3f\n",(double)(end-start))

}

==============================================================

【程序94】

题目:时间函数举例4,一个猜数游戏,判断一个人反应快慢。(版主初学时编的)

1.程序分析:

2.程序源代码:

#include "time.h"

#include "stdlib.h"

#include "stdio.h"

main()

{char c

clock_t start,end

time_t a,b

double var

int i,guess

srand(time(NULL))

printf("do you want to play it.('y' or 'n') \n")

loop:

while((c=getchar())=='y')

{

i=rand()0

printf("\nplease input number you guess:\n")

start=clock()

a=time(NULL)

scanf("%d",&guess)

while(guess!=i)

{if(guess>i)

{printf("please input a little smaller.\n")

scanf("%d",&guess)}

else

{printf("please input a little bigger.\n")

scanf("%d",&guess)}

}

end=clock()

b=time(NULL)

printf("\1: It took you %6.3f seconds\n",var=(double)(end-start)/18.2)

printf("\1: it took you %6.3f seconds\n\n",difftime(b,a))

if(var<15)

printf("\1\1 You are very clever! \1\1\n\n")

else if(var<25)

printf("\1\1 you are normal! \1\1\n\n")

else

printf("\1\1 you are stupid! \1\1\n\n")

printf("\1\1 Congradulations \1\1\n\n")

printf("The number you guess is %d",i)

}

printf("\ndo you want to try it again?(\"yy\".or.\"n\")\n")

if((c=getch())=='y')

goto loop

}

==============================================================

数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,"正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过我们绝大多数人生来具有10个手指头这个解剖学事实的结果.尽管在历史上手指计数(5,10进制)的实践要比二或三进制计数出现的晚."(摘自有空大家可以看看哦~,很有意思的).为了能方便的与二进制转换,就使用了十六进制(2 4)和八进制(23).下面进入正题.

数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为

(-127~-0 +0~127)共256个.

有了数值的表示方法就可以对数进行算术运算.但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下: 假设字长为8bits

( 1 ) 10- ( 1 )10 = ( 1 )10 + ( -1 )10 = ( 0 )10

(00000001)原 + (10000001)原 = (10000010)原 = ( -2 ) 显然不正确.

因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应. 下面是反码的减法运算:

( 1 )10 - ( 1 ) 10= ( 1 ) 10+ ( -1 ) 10= ( 0 )10

(00000001) 反+ (11111110)反 = (11111111)反 = ( -0 ) 有问题.

( 1 )10 - ( 2)10 = ( 1 )10 + ( -2 )10 = ( -1 )10

(00000001) 反+ (11111101)反 = (11111110)反 = ( -1 ) 正确

问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大).

于是就引入了补码概念. 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.在补码中用(-128)代替了(-0),所以补码的表示范围为:

(-128~0~127)共256个.

注意:(-128)没有相对应的原码和反码, (-128) = (10000000) 补码的加减运算如下:

( 1 ) 10- ( 1 ) 10= ( 1 )10 + ( -1 )10 = ( 0 )10

(00000001)补 + (11111111)补 = (00000000)补 = ( 0 ) 正确

( 1 ) 10- ( 2) 10= ( 1 )10 + ( -2 )10 = ( -1 )10

(00000001) 补+ (11111110) 补= (11111111)补 = ( -1 ) 正确

所以补码的设计目的是:

⑴使符号位能与有效值部分一起参加运算,从而简化运算规则.

⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计

所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C等其他高级语言中使用的都是原码。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11793178.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存