评估 C 二元运算
Evaluating C binary operations
我正在用 C 语言执行一些逻辑任务,虽然我手动评估了一些结果,但与 CodeBlocks 打印的结果不同。
考虑到先前执行的指令,以下表达式的十进制值是多少?
这是数字(我不明白用“<<<<<<<<”签名的行的输出):
int i, j, k, *p2i;
float fp;
p2i=&k;
i=0x22;
j=025;
k=25;
++k;
k++;
k|7&12; <<<<<
fp=10/20; <<<<<<
fp=(float)10/20; <<<<<<
k|7&12; ==> 27|7&12 ==> 27|4 ==> 31 (discarded value)
fp=10/20; ==> fp=0 ==> 0 (fp is now 0.0)
fp=(float)10/20; ==> fp=10.0f/20 ==> fp=0.5f (fp is 0.5)
k=25;
++k;
k++;
k|7&12;
前3行后,k
为27。在第四个表达式中,按位与运算符&
的优先级高于按位或运算符|
,因此是相当于 27|(7&12);
将值转换为二进制给我们 11011|(00111&01100);
内部计算结果为 00100
,然后 11011|00100
计算结果为 11111
,即 31.
此表达式的值出现在 void
上下文中(即未分配给任何内容)并被丢弃。
fp=10/20;
常量 10
和 20
都是 int
类型。因此执行整数除法,结果为 0。然后将该值转换为 float
并分配给 fp
.
fp=(float)10/20;
常量 10
转换为 float
,然后除以 20
。由于其中一个操作数是 float
类型,另一个被提升为 than 类型并执行浮点除法,结果是 0.5
。然后将该值分配给 fp
.
我正在用 C 语言执行一些逻辑任务,虽然我手动评估了一些结果,但与 CodeBlocks 打印的结果不同。
考虑到先前执行的指令,以下表达式的十进制值是多少?
这是数字(我不明白用“<<<<<<<<”签名的行的输出):
int i, j, k, *p2i;
float fp;
p2i=&k;
i=0x22;
j=025;
k=25;
++k;
k++;
k|7&12; <<<<<
fp=10/20; <<<<<<
fp=(float)10/20; <<<<<<
k|7&12; ==> 27|7&12 ==> 27|4 ==> 31 (discarded value)
fp=10/20; ==> fp=0 ==> 0 (fp is now 0.0)
fp=(float)10/20; ==> fp=10.0f/20 ==> fp=0.5f (fp is 0.5)
k=25;
++k;
k++;
k|7&12;
前3行后,k
为27。在第四个表达式中,按位与运算符&
的优先级高于按位或运算符|
,因此是相当于 27|(7&12);
将值转换为二进制给我们 11011|(00111&01100);
内部计算结果为 00100
,然后 11011|00100
计算结果为 11111
,即 31.
此表达式的值出现在 void
上下文中(即未分配给任何内容)并被丢弃。
fp=10/20;
常量 10
和 20
都是 int
类型。因此执行整数除法,结果为 0。然后将该值转换为 float
并分配给 fp
.
fp=(float)10/20;
常量 10
转换为 float
,然后除以 20
。由于其中一个操作数是 float
类型,另一个被提升为 than 类型并执行浮点除法,结果是 0.5
。然后将该值分配给 fp
.