C程序问题,很简单的~

来源:百度知道 编辑:UC知道 时间:2024/06/22 03:22:04
//我用的是visual c++6.0环境

#include<stdio.h>
void main()
{unsigned char result;
int a;
a = 2;
//主要看最后两句
result = ~a;
printf("result = %d\n",result);
}
当程序如上的时候,运行后输出 result=253
但是当我把最后两句改成一句
printf("result = %d\n",( ~a ));
以后,输出的是 -3 这是为什么?为什么不能这么该呢?
还有,明明定义的是unsigned型,出错也不应该打出负数啊?
还请高人指点,感谢~

result = ~a; //因为a取反后, 低字节是11111101,被强制类型转换成unsigned char 类型,
printf("result = %d\n",result);//所以result = 253.

printf("result = %d\n",( ~a ));//因为~a没有赋给任何变量,系统默认有个临时存储变量,~a的值是-3,系统就按照-3输出,此时与result的类型无关。

这个-3不是result的值,是在最后输出时被取反了而已。

printf("result = %d\n",( ~a ));
你这样输出,和result没有任何关系啊...