Apple
public://topics-images/apple_webp.png
SCB10X
public://topics-images/347823389_774095087711602_515970870797767330_n_webp.png
Windows 11
public://topics-images/hero-bloom-logo.jpg
Doom
public://topics-images/doom_logo.png
Huawei
public://topics-images/huawei_standard_logo.svg_.png
Threads
public://topics-images/threads-app-logo.svg_.png
Google Keep
public://topics-images/google_keep_2020_logo.svg_.png
Fortnite
public://topics-images/fortnitelogo.svg_.png
Instagram
public://topics-images/instagram_logo_2022.svg_.png
SCB
public://topics-images/9crhwyxv_400x400.jpg
Microsoft
public://topics-images/microsoft_logo.svg_.png
Basecamp
public://topics-images/bwpepdi0_400x400.jpg
Tinder
public://topics-images/hwizi8ny_400x400.jpg
FTC
public://topics-images/seal_of_the_united_states_federal_trade_commission.svg_.png
Pinterest
public://topics-images/pinterest.png
Palantir
public://topics-images/-nzsuc6w_400x400.png
Gemini
public://topics-images/google_gemini_logo.svg__0.png
AIS Business
public://topics-images/logo-business-2021-1.png
PostgreSQL
public://topics-images/images.png
JetBrains
public://topics-images/icx8y2ta_400x400.png
Krungthai
public://topics-images/aam1jxs6_400x400.jpg
Palworld
public://topics-images/mccyhcqf_400x400.jpg
Bill Gates
public://topics-images/bill_gates-september_2024.jpg
VMware
public://topics-images/1nj4i1gp_400x400.jpg
Take-Two Interactive
public://topics-images/0khle7nh_400x400.jpg
OpenAI
public://topics-images/ztsar0jw_400x400.jpg
Thailand
public://topics-images/flag_of_thailand.svg_.png
NVIDIA
public://topics-images/srvczsfq_400x400.jpg
ServiceNow
public://topics-images/ytnrfphe_400x400.png
PS5
public://topics-images/playstation_5_logo_and_wordmark.svg_.png
Klarna
public://topics-images/urcllpjp_400x400.png
Google Play
public://topics-images/play.png
Drupal
public://topics-images/drupal.png
Virtua Fighter
public://topics-images/virtua_figther_2024_logo.png
Paradox Interactive
public://topics-images/paradox_interactive_logo.svg_.png
Europa Universalis
public://topics-images/europa-icon.png
Nintendo Switch 2
public://topics-images/mainvisual.png
Cloudflare
public://topics-images/cloudflare_logo.svg_.png
Samsung
public://topics-images/samsung.png
Google
public://topics-images/google_2015_logo.svg_.png
Uber
public://topics-images/uber.png
Microsoft 365
public://topics-images/m365.png
USA
public://topics-images/flag_of_the_united_states.svg_.png
GM
public://topics-images/0pe0po-z_400x400.jpg
Perplexity
public://topics-images/perplex.jpg
Xperia
public://topics-images/xperia.png
iOS 18
public://topics-images/ios-18-num-96x96_2x.png
True
public://topics-images/true_logo.png
เขาหมายถึงจะทำก่อนมาบวกกัน
nat3738 Thu, 12/17/2009 - 22:20
เขาหมายถึงจะทำก่อนมาบวกกัน คือ
อันแรก
xy*(--y)+ (เป็น post-order)
คือ เอา x*y แล้ว ยัดเข้า stack
จากนั้นเจอ --y จึงลดค่า y ลงหนึ่ง แล้วนำค่า y ที่ลดแล้วมาใช้ในการบวก ซึ่งทำทีหลังการลดค่า
ถ้าผมเข้าใจไม่ผิดนะครับ
+*xy--y +--y*xy
soginal Thu, 12/17/2009 - 23:07
+*xy--y +--y*xy
ไม่นิยามไว้ครับ
luckyman Thu, 12/17/2009 - 23:49
ไม่นิยามไว้ครับ ขึ้นอยู่กับคอมไพเลอร์ (ISO C99 หัวข้อ 6.5 Expression ดู footnote 73-74)
จากผลลัพธ์ข้างบน คอมไพเลอร์ทำจากซ้ายไปขวาครับ
ตัวแรก
ตัวหลัง
ผลลัพธ์จาก gcc 4.4 ได้ตามด้านบนครับ
ส่วน visual c++ 2008 ได้ผลลัพธ์เป็น 44 ทั้งคู่
ขอบคุณทุกท่านมากครับ ขอถามเพิ
Peace Fri, 12/18/2009 - 00:59
ขอบคุณทุกท่านมากครับ
ขอถามเพิ่มเติมว่า ถ้า compiler(gcc) ทำจากซ้ายไปขาย แล้วทำไม z = x*y+x*--y จึงได้ z = 80 หรอครับ คือ ถ้าทำจากซ้่ายมาขวา ผมเข้าใจว่า มันจะทำ x*y ก่อน ตามด้วย x*--y แล้วค่อยบวกกัน ซึ่งน่าจะได้ 50+40=90 แต่ไม่ใช่
จริงด้วย ดูจากไฟล์ assembly
luckyman Fri, 12/18/2009 - 01:53
In reply to ขอบคุณทุกท่านมากครับ ขอถามเพิ by Peace
จริงด้วย ดูจากไฟล์ assembly กลายเป็น
แถมถ้าคอมไพล์ด้วย -O2
สรุปคือ ไม่เข้าใจเหมือนกัน
อย่าไปดู assembly ครับ
soginal Fri, 12/18/2009 - 09:54
In reply to จริงด้วย ดูจากไฟล์ assembly by luckyman
อย่าไปดู assembly ครับ เดี๋ยวงงเปล่าๆ จริงๆ ถ้าจขกท กำลังเรียนเรื่องวิชา compiler ก็ดูตามหลักการ prefix postfix ก็น่าจะพอแล้ว
ส่วนในกรณีนี้เกิดจากความพยายามทำ optimize ของ compiler ครับ
x*y+x*--y เปลี่ยนได้เป็น x*(y+--y) หรือ (y+--y)*x ครับ
แต่มันเอา y+--y มาทำก่อน ก็เพราะว่า มันมี --y อยู่ ก็เลยดึงมาทำก่อนครับแต่ที่มันเอา y+--y มาทำก่อนเพราะเหตุผลว่า จะเอา z ไปคูณไม่ได้จนกว่าจะทำ y+y ก่อน แต่จะทำ y+y ไม่ได้จนกว่าจะทำ --y ดังนั้นผลลัพธ์มันก็เลยออกมาอย่างที่เห็น
ขอแนะนำนะครับ ใส่วงเล็บให้เป็
Thaina Fri, 12/18/2009 - 15:58
ขอแนะนำนะครับ
ใส่วงเล็บให้เป็นนิสัยครับ สูตรคำนวน ต้องการอะไร ใส่ให้ชัดเจนไว้
มาอ่านวันหลังจะได้รู้เรื่อง
เขียนไว้โล่งๆแบบนี้ บางทีหนึ่งชี่วโมงผ่านไป อาจจะลืมไปแล้วว่าสูตรนี้จะ Flow แบบไหน
a * b - c ผมยังใส่ (a * b) - c เลย
แล้วอย่าเล่นกับ --x --y ดีกว่าครับ
Performance ที่ได้ ไม่น่าจะคุ้มกับความงงที่จะเกิดขึ้น
มันไปตีกับ Compiler อีกตะหาก
จริงครับ สำหรับการ coding
PiKO Fri, 12/18/2009 - 21:59
In reply to ขอแนะนำนะครับ ใส่วงเล็บให้เป็ by Thaina
จริงครับ สำหรับการ coding จริงๆ ทั้งวงเล็บและขึ้นบรรทัดใหม่
ถ้าทำได้โดยที่ทำให้ code ไม่รกและดูยาก ผมก็จะทำเสมอ
แต่นี่เข้าใจว่าต้องการศึกษาน่ะครับ (ไม่รู้จะอธิบายยังไงเหมือนกัน ^^')
มันเป็นเรื่องของการศึกษาน่ะคร
mr_tawan Tue, 12/22/2009 - 22:24
In reply to ขอแนะนำนะครับ ใส่วงเล็บให้เป็ by Thaina
มันเป็นเรื่องของการศึกษาน่ะครับ :-)
จะสอบแล้วอ่ะดิคับ 555
ellipsis Fri, 12/18/2009 - 17:11
จะสอบแล้วอ่ะดิคับ
555
ขอบคุณทุกท่านมากครับ สรุปคือ
Peace Fri, 12/18/2009 - 19:19
ขอบคุณทุกท่านมากครับ สรุปคือ มันขึ้นอยู่กับ compiler ว่าจะมองยังไง