c语言难题谁知道啊。。。急急急!!!!谁能给出正确答案,并且能解释你的答案,这就是华为面试题,谁知道
voidmain(){charc=128;unsignedcharuc=128;unsignedshortus;us=c+uc;printf("%x\n",us);us=...
void main()
{
char c=128;
unsigned char uc=128;
unsigned short us;
us=c+uc;
printf("%x \n",us);
us=c+(char)uc;
printf("%x \n",us);
us=(unsigned char)c+uc;
printf("%x \n",us);
} 展开
{
char c=128;
unsigned char uc=128;
unsigned short us;
us=c+uc;
printf("%x \n",us);
us=c+(char)uc;
printf("%x \n",us);
us=(unsigned char)c+uc;
printf("%x \n",us);
} 展开
4个回答
展开全部
char一般默认情况下是signed 类型(当然是也有可能是unsigned 跟编译器有关) 及有符号类型 范围是 -128 ~ 127 因为c = 128 越界了 所以此时的c 变为 范围负数的第一个值 即c=-128 同理啦 如果c=129 那c= -127了 所以us = 128 +( -128 )= 0; 第二个输出呢 us = -256 这里牵扯到负数 转为16进制了 我们知道负数是以补码的形式存放的 首先要把它转为其原码 负数的原码 是补码除符号位之外其他所有的位 取反之后再加1 -256 补码1000 0001 0000 0000 按照上述规则 源码就是1111 1111 0000 0000 16进制即为 ff00 第三个 256 输出 16进制自然是100啦 这个是十进制转16进制了 直接除16 余数取反得到的 100~~~
展开全部
void main()
{
char c = 128; /* c = -128 */
unsigned char uc = 128; /* uc = 128 */
unsigned short us;
us=c+uc; /* us = c + uc = 0 */
printf("%x \n",us); /* 0 */
/* printf("%d\n",c); */
/* printf("%d\n",uc); */
us=c+(char)uc; /* u = -128 + (-128) = -256;printf("%x \n",-256);ff00 */
printf("%x \n",us);
us=(unsigned char)c+uc; /* u = 128+ 128 = 256 printf("%x \n",256); 100 */
printf("%x \n",us);
getch();
{
char c = 128; /* c = -128 */
unsigned char uc = 128; /* uc = 128 */
unsigned short us;
us=c+uc; /* us = c + uc = 0 */
printf("%x \n",us); /* 0 */
/* printf("%d\n",c); */
/* printf("%d\n",uc); */
us=c+(char)uc; /* u = -128 + (-128) = -256;printf("%x \n",-256);ff00 */
printf("%x \n",us);
us=(unsigned char)c+uc; /* u = 128+ 128 = 256 printf("%x \n",256); 100 */
printf("%x \n",us);
getch();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
0
ff00
100
ff00
100
追问
我知道答案,我也可以在软件上算啊,要原因,,你懂吗???
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你想问哪个问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询