用下列语句定义a,b,c,然后执行b=a、c='b'+b,则b,c的值是().long a=0xffffff; int b; char c;A:0ffffff 和0x61B:-1和98C:-1和97D:指向同一地址求解释
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/26 10:22:50
用下列语句定义a,b,c,然后执行b=a、c='b'+b,则b,c的值是().long a=0xffffff; int b; char c;A:0ffffff 和0x61B:-1和98C:-1和97D:指向同一地址求解释
用下列语句定义a,b,c,然后执行b=a、c='b'+b,则b,c的值是().
long a=0xffffff;
int b; char c;
A:0ffffff 和0x61
B:-1和98
C:-1和97
D:指向同一地址
求解释
用下列语句定义a,b,c,然后执行b=a、c='b'+b,则b,c的值是().long a=0xffffff; int b; char c;A:0ffffff 和0x61B:-1和98C:-1和97D:指向同一地址求解释
如果用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
#include
#include
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.