c语言负数运算

Python021

c语言负数运算,第1张

/*

c语言复数运算

*/

#include<stdio.h>

#include<stdlib.h>

typedef struct

{

double r,i //r为实部,i为虚部 

}complex

complex* add(complex *a,complex *b) //复数a + 复数b 

complex* minus(complex *a,complex *b)  //复数a - 复数b 

complex* multiply(complex *a,complex *b) //复数a * 复数b 

void printComplex(complex *a) //输出 

complex* add(complex *a,complex *b) {

complex *add

add->r =a->r+b->r

add->i =a->i+b->i

return add

}

complex* minus(complex *a,complex *b) 

{

complex *minus

minus->r =a->r-b->r

minus->i =a->i-b->i

return minus

}

complex* multiply(complex *a,complex *b) 

{

complex *multiply

multiply->r = a->r*b->r-a->i*b->i

multiply->i = a->i*b->r+a->r*b->i

return multiply

}

void printComplex(complex *a) //输出要注意虚部有负数的情况

{

if(a->r!=0)  

printf("%.2lf",a->r) //不要断行,先输出实部

else

printf("0.00")

if(a->i>0) //大于0,正常输出+虚部

printf(" + %.2lfi\n",a->i)

else if(a->i<0)  //虚部是负数,不用输出+号了,直接输出负数

printf(" %.2lfi\n",a->i)

else

printf(" + 0.00i\n")//虚部为0

}

帮你改了下,再去试试吧。一时之间我也想不出还有什么漏洞了。祝好运。如果是自己写主函数的话,改一改那个输入吧,输入很容易会造成问题的

这一句: scanf("...%f  %c ",...,c),一个不好输入就会出错,c可能会获取到空白。

-5*3=-155*-3=-15-5*-3=15这三个不解释了吧。-5/3=-15/-3=-1-5/-3=1这三个你这么理解,5/3=1,然后负负为正,正负为负,计算机的运算过程差不多也是这样。-5%3=-25%-3=2-5%-3=-2这三个也是那么理解的,首先不管符号,然后5%3=2,然后负负为正,正负为负。。。-5&3=35&-3=5-5&-3=-7这个是按位与,-5二进制是10000101,负数在计算机中是以补码保存的,补码是11111011,3是00000011,正数不用存补码,还是原码,按位与之后就是00000011,就是3。5和-3按这个算法,5原码是00000101,-3原码是10000011,补码是11111101,按位与,00000101,就是5。-5和-3,都是补码,-5补码是11111011,-3补码是11111101,按位与,结果是11111001,这里要注意了,这个数的符号位为1,所以这是一个补码,要翻译一下,除符号位不变外,其他位减1取反,结果是10000111,就是-7。-5<<3=-405<<-3=-1610612736-5<<-3=1610612736移位,第一个还好说,-5的补码是11111011,左移3位,左移的过程后边是要补两个数的符号位的与运算的,结果就是11011000,这个数是一个负数,需要转换一次,除符号位外-1取反,就是10101000,就是-40。第二个和第三个比较麻烦,我以上给你说的都是按照8位的存储说的,其实计算机真正是按照32位存储的,也就是传说中的32位系统,未来还会有64位系统这一说法,那一个数字就是64位了,好了,现在咱们看32位的情况。5的实际存储为32位的00000000000000000000000000000101,之前不提另外的0因为不影响运算结果,现在影响了,就加上。左移-3位,就是右移3位,前边补1,也就是两数的符号位求异或的结果,异或说白了还是负负为正,正负为负,这里补的就是1,结果就是11100000000000000000000000000000,这个数就是-1610612736。