[+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等其他高级语言中使用的都是原码。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)