今天在编写程序用到了两个有符号相乘的问题!
刚开始是这样的:
int a=-13;
char b[8]={128, , ,, } 第一个数是128 后面的没有写出来
long c=0;
当执行下面这个语句的时候得出的结果刚好符号相反
c=a*b;
c=0x680结果是正的,其实按照运算结果应该为负
当我把 a=13的时候 c=a*b=0xF980 为负数
结果的符号刚好和理论相反
也在网上搜索了一下,说是C语言中两个数相乘 是按照intl类型相乘的结果还是int
所以有可能是溢出导致的问题所以将程序改为 ps:即使是int相乘 上面的 c=a*b会溢出吗?
c=(long)a*b; 但是这样结果依然差了一个符号
但是当我把数组 char b[]类型改为 int b[]的时候结果就是正确的 int和char相乘的时候不是将char 强制转换成 int类型了吗 这是为什么呢
用的是 c51 v.900版本
谢谢
|