评估 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;

常量 1020 都是 int 类型。因此执行整数除法,结果为 0。然后将该值转换为 float 并分配给 fp.

fp=(float)10/20;

常量 10 转换为 float,然后除以 20。由于其中一个操作数是 float 类型,另一个被提升为 than 类型并执行浮点除法,结果是 0.5。然后将该值分配给 fp.