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);
}
展开
 我来答
韩涛董青
2011-10-14 · TA获得超过443个赞
知道小有建树答主
回答量:166
采纳率:0%
帮助的人:127万
展开全部
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~~~
GIS广益DATA
2011-10-13 · TA获得超过2518个赞
知道大有可为答主
回答量:4658
采纳率:20%
帮助的人:2811万
展开全部
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();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mawei1100
2011-10-13 · 超过26用户采纳过TA的回答
知道答主
回答量:110
采纳率:0%
帮助的人:71.3万
展开全部
0
ff00
100
追问
我知道答案,我也可以在软件上算啊,要原因,,你懂吗???
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sqiuzhao
2011-10-14 · TA获得超过1347个赞
知道小有建树答主
回答量:967
采纳率:0%
帮助的人:424万
展开全部
你想问哪个问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式