用下列语句定义a,b,c,然后执行b=a、c='b'+b,则b,c的值是().
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/22 13:38:33
用下列语句定义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:指向同一地址
求解释
long a=0xffffff;
int b; char c;
A:0ffffff 和0x61
B:-1和98
C:-1和97
D:指向同一地址
求解释
如果用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.
再问: 答案选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.
再问: 我试了,但是为什么八个f是-1?
再答: 因为此时的int是有符号的,最高位是符号位,。。。(可以见上面仁兄的回答。)0ffffff是十六进制的表示,代表如果不足就补0,并不是上面说的错误的表达方式。(0ffffff与0xfffffff在本质上是一样的)。
再问: 你们都太精彩了,我都不知道该选谁了?
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.
再问: 答案选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.
再问: 我试了,但是为什么八个f是-1?
再答: 因为此时的int是有符号的,最高位是符号位,。。。(可以见上面仁兄的回答。)0ffffff是十六进制的表示,代表如果不足就补0,并不是上面说的错误的表达方式。(0ffffff与0xfffffff在本质上是一样的)。
再问: 你们都太精彩了,我都不知道该选谁了?
执行下列语句后,a、b、c的值是 .
若定义语句:int a,b,c,*p=&c;之后,接着执行下列选项中的语句,则能正确执行的语句是
若有定义:int a=1,b=11,c=4; 则执行下列语句后,a,b,c的值分别为( ).
执行下列语句后a的值为( ),b的值为( ).int a,b,c; a=b=c=1; ++a|| ++b && ++c;
4.执行下列语句后a的值为( ),b的值为( C ).int a,b,c; a=b=c=1; ++a|| ++b &&
16、定义a、b、c为整形变量,执行语句a=9 b=8 c=10 c=a a=b b=c后,其a ,b的值是
执行语句int a,b,c;a=(b=c=3,c++,b+=c),则a的值是?
执行了下列语句后a,b的值是多少?inta,b,c;a=b=c=1;++a‖++b&&++c;求解释.
定义int a=10,b=8,c=4;顺序执行下列语句后,变量a的值是?c=(b-=(a-4));a=(c%2)+(b-
若有定义Int a=8,b=5,c:执行语句C=a/b+0.4后.c的值到底是1还是1.4
若定义:int a=8,b=5,c;执行语句c=a/b+0.4;运行后为什么c的值是1?
执行语句a=b=c=1;++a&&--b||--c;后,变量a、b、c的值依次是()?