簡體   English   中英

無法理解x * = y + 1輸出

[英]Can't understand x *= y+1 output

我在理解代碼輸出時遇到問題。 請解釋一下......

#include<stdio.h>
void main()
{
     int x=2,y=5;
     x*=y+1;
     printf("%d",x);
}

輸出為12.但根據我的理解x*=y+1; x=x*y+1; 但是根據運算符優先級x*y應該被評估,然后adding 1所以它應該是10 + 1 = 11。 但它是12 - 有人可以解釋嗎?

它將被評估為

x = x * (y + 1);

所以

x = 2 * ( 5 + 1 )
x = 12

這里發生的是如何在編程中發生操作順序。

是的,如果你有這個等式x*y+1 ,它將是(x * y ) + 1並導致11。

但是,在編程中,方程式的右側=符號由符號前進的被修改解決了現有=標志。 在這個等式中,它是相乘的。

所以x *= y + 1實際上是x = x * ( y + 1 ) ,它將是12。
^在這種情況下, asterisk(*)將右側的整個等式乘以x ,然后將該結果賦值給x

它被翻譯成: x = x*(y+1);

很明顯它打印出12。

你的理解是正確的,但它是這樣的:

x*=y+1;  =>  x = x * (y + 1);

現在申請BODMAS

x *= y + 1x = x * (y + 1)

運算符+優先級高於運算符*=

x*=y; x=x*y; 這里x*=(y+1)x = x * (y + 1);那樣得到擴展x = x * (y + 1);

這里從c中的操作員程序你可以看到

加法/減法分配的過程比簡單的添加操作要低。

所以在這里

X * = Y + 1;

+首先執行。

所以

x = x * (6)

所以x = 2 * 6

x = 12;

*=和類似的是一種C賦值運算符 ,即這些運算符與*相似。

現在從C運算符優先級 ,這些運算符具有最低優先級(高於, )因此將首先計算y + 1 ,然后將評估*=並將結果分配給x

它評估為

x = x * (y + 1);

所以

x = 2 * (5 + 1) = 12

看一下操作員的訂單 ,你就會明白為什么在這種情況下會對它進行評估。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM