mlsb.net
当前位置:首页 >> voiD mAin{unsignED long n; unsignED int E; int ... >>

voiD mAin{unsignED long n; unsignED int E; int ...

你的问题出在格式说明符上,unsigned long应该用%lu,unsigned int应该用%u,这样就可以了。结果应该是2。

scanf("%c,%c",&c1,&c2); 改成: scanf("%c",&c1); scanf("%c",&c2); 这个语句分开获取就可以获取字符的值了,printf("c1=%c,c2=%c\n",c1,c2);

long int 的格式控制符 %ld

char类型的数据占一个字节,由于i=-1,又由于数据在计算机中是按补码的形式存储的,-1的补码是11111111,unsigned int 在计算机中占4个字节,所以当把 i 强制转化为unsigned int时,其 p 的值在计算机中的二进制为1...1,共有32个1,也就是十进...

a是int型变量,int=signed long (有符号长整型),就是有正负之分。 int的范围是 -(2^31)-1 ~ (2^31)-1 %u是unsigned,无符号,就是没有正负之分,只有正数,负数也当作正数处理。 这里的范围是一个环状的,-1的无符号型并不是1,而是2^32-1,...

分给我吧? union { unsigned long b; unsigned char c[4]; }a; unsigned int d[2]; a.b = 0x12345678; d[0] = a.c[3]; d[1] = a.c[2]; printf("%x %x\n",a.c[3],a.c[2]); printf("%x %x\n",d[0],d[1]); printf("%d %d\n",d[0],d[1]);

%u是打印无符号数,所以负数的符号位也被处理为数值的一部分了,所以输出结果是个很大的数。

无符号数打印用u,比如printf("signed int max = %d\t", signed_i);改成printf("signed int max = %u\t", signed_i);

scanf(“%c,%c”, &c1,&c2)这行有问题,因为输入时你要输入“,”,而“,”是个字符,所以这条语句应该改为scanf(" %c%c", &c1,&c2);还有就是c,d好像没有输入,其他的问题不大。

其实它存进去的是-100的补码,然后你读的时候用%d读,它以为是有符号数,就把补码翻译回来,读成了-100。如果你用%u来读,你读到的肯定不是-100,因为它会以为是无符号数,它不会将原来的补码翻译,而是“直译”成正整数。

网站首页 | 网站地图
All rights reserved Powered by www.mlsb.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com