有符号整数的向右移位运算也并不等同于除以2的某次幂。(-1)>>1,这个操作结果一般不为0.但是(-1)/2在大多数C实现上求值结果都为0;
转载:
int型数据:-1=(1000,0001B)原=(1111,1110B)反=(1111,1111B)补=(FFH)补。补码在计算机中进行的运算不同于一般的二进制数运算。他有自己的一套规则。比如加减法:[X+Y]补=[X]补+[Y]补;[X-Y]补=[X]补+[-Y]补,通过双高位识别法进行溢出判断。补码除法分恢复余数法和加减交替法。乘除法的运算相对于加减法复杂。 C语言中数的运算也有其自己的一套规则,简单的数是int->float;short->long;的方向转变。当整型数和整型数运算时得到的一定是个整型数;整型和浮点型数运算现将整型转化为浮点型数再运算的到的是一个浮点数,若将改浮点数赋值给整型数将会进行强制类型转换。去掉小数部分而不是四舍五入。 比如:比较下列两个结果:
#include "stdio.h"
mian()
{int n;
float m,a,b;
printf("please input two num(a/b).example:100,200");
scanf("%f,%f",&a,&b);
printf(" fist result:%d\n second result:%f\n",n=a/b,m=a/b);
}
输入:-1,2 得到结果: fist result:0 second result:-0.5000000