簡體   English   中英

Java內聯int swap。 為什么這只適用於Java

[英]Java inline int swap. Why does this only work in Java

我被要求在不使用臨時變量或使用xor的情況下編寫交換,我想出了這個。
在Java中,這可行,但在C / C ++中,這不起作用。

我的印象是,由於'|'左側'a'的值,這總是有效的 將被存儲在寄存器中,然后分配給'a'將否定對'b'的指定值的影響。

int a = 5;
int b = -13;
b = a | (0 & (a = b));

您正在修改變量並讀取其值而沒有插入序列點。

b =         a          + 0 *   (a = b);
//  reading a's value        modifying a

這是未定義的行為。 您無權對代碼的作用有任何期望。

C / C ++編譯器將表達式0 * (a = b)0 ,將代碼片段轉換為:

int a = 5;
int b = -13;
b = a;

在C / C ++中,按表達順序執行分配。 在Java中,無論其他表達式如何,分配都會在最后發生。

例如,這在C中遞增但在Java中沒有任何作用。

a = a++;

暫無
暫無

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

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