void main() { int a=1234,x; x=(char)a; printf("a[d]=%d a[x]=%x x[d]=%d x[x]=%x \n",a,a,x,x); }输出:a[d]=1234 a[x]=4d2 x[d]=-46 x[x]=ffd2 我想了解x[d]为什么=-46.请指教

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/04 00:27:03
void main() { int a=1234,x; x=(char)a; printf(

void main() { int a=1234,x; x=(char)a; printf("a[d]=%d a[x]=%x x[d]=%d x[x]=%x \n",a,a,x,x); }输出:a[d]=1234 a[x]=4d2 x[d]=-46 x[x]=ffd2 我想了解x[d]为什么=-46.请指教
void main() { int a=1234,x; x=(char)a; printf("a[d]=%d a[x]=%x x[d]=%d x[x]=%x \n",a,a,x,x); }
输出:a[d]=1234 a[x]=4d2 x[d]=-46 x[x]=ffd2
我想了解x[d]为什么=-46.请指教

void main() { int a=1234,x; x=(char)a; printf("a[d]=%d a[x]=%x x[d]=%d x[x]=%x \n",a,a,x,x); }输出:a[d]=1234 a[x]=4d2 x[d]=-46 x[x]=ffd2 我想了解x[d]为什么=-46.请指教
这是因为:
x=(char)a;将a强制转换后,符值,而a=1234,即0x04d2,高字节为04,低字节为d2,char型为1字节,所以取低字节d2,而X为int型,所以再32位系统中分给它的是4字节,16为系统中为2字节,你的环境应是16位系统,这样的话x的低字节为d2,高字节,没赋值,是随机,所以出现了x=0xffd2,友因x为有符号型,最高位为1,为负数,0xffd2取反加1,转成10进制就是-46.
修改:
wangbin45623说的对,高字节是符号扩展的问题,因低字节为d2,最高位为1,所以符号扩展后为:0xffd2.

#include void main(){int a[30];int i;for (i=0,i int main(void) { int k=0; while(k++ void Function() { printf(Call Function! ); } int main() { void (*p)(); *(int*)&p=(int)Function; #include int a=3,b=5; max (int a,int b) {int c; c=a>b?a:b; return (c); } void main() {int #include void main() { int a,b,c; for(a=1; a #include void main() { int a,c; a=0; if (a #include void main() { int a=1 b=2 c=3 cout #include void main(){int i,j,a=0;for(i=0;i 九九乘法表程序#include void main(){int i,j,a;for(i=1;i #include void main() { int a[3][3],i,j; for(i=0;i #include void main() { int a,b,c,n; for(n=100;n #includevoid numplus();void mumminus();void main (){mumplus();mumminus();}void numplus(){for (int i=0;i #include void main( ) { int a=3,b=5; int *p,*q; void f1(int x,int y);void f2(int *x,int *y);p=&a; q=&b;f1(*p,*q) ;printf(a=%d ,b=%d ,a,b);f2(p,q);printf(a=%d ,b=%d ,a,b);}void f1(int x,int y) { int t;t=x; x=y; y=t;}void f2(int *x,int *y) { int #include void main( ) { int k=-3; if (k void main() {int t=1;fun(fun(t));} fun(int h) {stvoid main(){int t=1;fun(fun(t));}fun(int h){static int a[3]={1,2,3}; int k; for(k=0;k #includevoid Func(void);int main(void){int i,n;printf( input a data:);scanf(%d,&n);for (i=0; i void swap1(int c0[],int c1[]) { int t; t=c0[0];c0[0]=c1[0];c1[0]=t; } void swap2(int *c0,int *c1) {void swap1(int c0[],int c1[]){ int t;t=c0[0];c0[0]=c1[0];c1[0]=t;}void swap2(int *c0,int *c1){int t;t=*c0;*c0=*c1;*c1=t;}void main(){int a[2]={3,5},b[ 画椭圆代码出错# include # include # include # include void MidpointEllipse(int a,int b,int color); int main() { int gdriver = DETECT,gmode=0; initgraph(500,600); MidpointEllipse(4,6,RED); getch(); closegraph(); return 0; } void MidpointE