【问题标题】:Evaluating C binary operations评估 C 二元运算
【发布时间】:2016-04-29 12:05:21
【问题描述】:

我正在用 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;     <<<<<<

【问题讨论】:

  • 16个操作中有3个你不懂;真的有必要在你的问题中包含你理解的 13 个吗?
  • 这是不必要的神秘和难以理解。 (你是从什么剪切和粘贴的?)请只展示你不理解的表达方式,说出你期望他们给出的内容,以及你得到了什么。
  • 可能需要注意的事项:& 的优先级高于 |,整数除法给出整数结果。
  • 我必须按照以下代码评估每一行的十进制值。这就是为什么这么多。
  • @mjrdnk 如果您不明白为什么,例如 p21、i 和 j 的分配与您表示需要帮助的条目 100% 无关,那么问题比您更深一点思考。在你说你不明白的 k 条目之后,关于 k 的条目也是如此。

标签: c binary bitwise-operators


【解决方案1】:
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)

【讨论】:

    【解决方案2】:
    k=25;
    ++k;
    k++;
    k|7&12;
    

    前3行之后,k为27。在第四个表达式中,按位与运算符&amp;的优先级高于按位或运算符|,因此相当于27|(7&amp;12);的值转换二进制给我们11011|(00111&amp;01100); 内部计算为00100,然后11011|00100 计算为11111,即31。

    此表达式的值出现在 void 上下文中(即它没有分配给任何东西)并被丢弃。

    fp=10/20;
    

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

    fp=(float)10/20;
    

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

    【讨论】:

    • 非常感谢@dbush 而不是 11011 的外部值,我一直在计算 11000。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 2017-03-27
    相关资源
    最近更新 更多