用下列语句定义a,b,c,然后执行b=a、c='b'+b,则b,c的值是()。

longa=0xffffff;intb;charc;A:0ffffff和0x61B:-1和98C:-1和97D:指向同一地址求解释... long a=0xffffff;
int b; char c;
A:0ffffff 和0x61
B:-1和98
C:-1和97
D:指向同一地址
求解释
展开
 我来答
123shenqixiao1
推荐于2016-12-02 · TA获得超过150个赞
知道小有建树答主
回答量:84
采纳率:0%
帮助的人:90.5万
展开全部
如果用gcc的编译器,结果选A,
long 和int 一样都是4个字节,因此用int的b = c;结果还是0xffffff,而用只有1个字节的char型数据c等于'b' + b时相当于只取b的后两位,又因为是有符号的char,因此0xFF就是-1,因此C = 'b' + (-1) 就是 ‘a’,也就是0x61。
如果将long换做long long 结果就大不一样了,因为sizeof(long long) = 8占用8个字节,结果将另外分析了。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
long a=0xffffff;
int b;
char c;
b = a;
c = 'b' + b;
printf("%d %d %d %x %x %x",sizeof(long),sizeof(long long),sizeof(char),a,b,c);
return 0;
}
输出如下:
4 8 1 ffffff ffffff 61
Process returned 0 (0x0) execution time : 0.123 s
Press any key to continue.

如果换做long long 结果如下:

4 8 1 ffffff 0 ffffff
Process returned 0 (0x0) execution time : 0.139 s
Press any key to continue.
更多追问追答
追问
答案选c
追答
如果答案选择是C的话,前提是a的后面是8个F,但题目是6个F,不信的话自己试下。
8个F的代码如下:
#include
#include
#include
int main()
{
long a = 0xffffffff;
int b;
char c;
b = a;
c = 'b' + b;
printf("%d %d %d %d %d %d",sizeof(long),sizeof(long long),sizeof(char),a,b,c);
return 0;
}

结果如下:
4 8 1 -1 -1 97
Process returned 0 (0x0) execution time : 0.104 s
Press any key to continue.
Brooklebu
2014-12-20 · TA获得超过281个赞
知道小有建树答主
回答量:281
采纳率:0%
帮助的人:300万
展开全部
C,因为b=a,b=0xffffff,因为是有符号int所以是-1,c='b'+b,即='b'-1,‘b’的码值是98,所以是98-1=97
更多追问追答
追问
因为b=a,b=0xffffff,因为是有符号int所以是-1,
可以再解释一下吗?
追答
0xffffff是十六进制数,所以a是内存二进制全是1,因为a是有符号,所以最高位是符号位,表示负数,根据c的负数表示原则,二进制全是1代表的十进制值就是-1,考点就是这个,至于楼下的说的A选项,0ffffff不是0xffffff是一个错误地表达方式
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式