回答
應該:)
這也是事實爲
x = Int32.MaxValue;
result = x == x + 1;
用什麼編程語言? –
@Paul,看起來像C#。 –
好問題。我的猜測是.NET/C# 但您的權利,語言可能是解決方案。也許在某種特定語言下,在某些情況下會出現意想不到的行爲 –
的Javascript在我腦海中,它有一個特殊的數值Infinity
。
因此,這實際上將返回true:
var x = Infinity;
alert(x == x + 1);
好點。我們不應該忘記極端的情況。 – Nickolodeon
'inf'確實是一個明智的選擇。 Python中的float('inf')'也一樣。 –
但請記住'Infinity'是JavaScript中的一個數字; JavaScript沒有整數類型的概念。並且'Infinity'被實現爲指數最大的浮點數,所以它不是一個整數。 –
當然這一定是假的,除非你做保羅所說的話;)X + 1計算爲一定值,該值大於1小於x。所以,例如45 == 45 + 1是錯誤的。在這個表達中沒有發生任何分派。
它取決於語言和它的運算符優先級。 ==
運算符有可能與+
運算符具有相同或更高的優先級。在這種情況下,您的表達式將擴展爲((x == x) + 1)
,這可能會給出錯誤(因爲您將1添加到布爾值)或可能評估爲2(因爲在很多語言中TRUE
等於1
)。
但我不知道==
與+
具有相同或更高優先級的語言(如果有的話)。
我遇到過一個從左到右的實現,沒有優先級的概念,爲此,這是事實。不過,想不到它是什麼。 –
@chris:想起Smalltalk。 –
好吧,那不是。我從未使用過它。 –
對於所有x,使用整數,x != x + 1
。對於浮點數字,它不能保證是真的;在足夠大的指數下,1將變爲無意義,並在尾數末尾丟失 - 從最大可能的指數中看到的最容易的情況是使得該值爲無窮大。無限加上一個就是無限。但它也適用於較小的指數。
然後,在支持運算符重載的語言中,很有可能打破這些微不足道的數學定律。例如,在Python中,
>>> class X(object):
... def __eq__(self, other):
... return True
... def __add__(self, other):
... return self
...
>>> x = X()
>>> x == x + 1
True
除非在問題中指定了類型(和實現),否則假設它始終爲真是不安全的。但是因爲已經指定它是一個整數,你可以知道所有x都是x != x + 1
。整數被存儲爲一系列位,並且通過切換最後一位並且然後攜帶(如果它已經被執行)來完成,其將不會得到相同的結果(不管整數類型中有多少位,只要它大於零)。
從最後一個想法開始,「假設它大於零」,如果您碰巧使用了一個奇怪的整數實現,它希望爲您節省內存並恰好是零位(根本不使用內存!), 'x == x + 1'將會是*真*。哦,當我說「提供大於零」時,我想我應該包含「溢出」;用一個不帶溢出的整數,對於x = 1,'x + 1'將是1,所以它是真實的而不是錯誤的。但我從來沒有遇到過小於4位的整數類型。我懷疑我是輕浮的。 –
等一下?爲什麼長度很重要,如果你不使用溢出?在一個沒有溢出且沒有錯誤的實現中,它有可能被實現,因此x = 2 ^(n-1)時x + 1 == x。 –
C和C++沒有定義當最大有符號整數值的整數類型存儲溢出時的行爲。例如,int
類型的最大合法值被稱爲INT_MAX
(可在標準頭文件中找到) - 這些語言不需要INT_MAX + 1
是特別的東西,即它們不需要要求編譯器或部署環境來確保它將不會仍然是INT_MAX
。但是他們極不可能(出於性能原因)爲每次算術運算的溢出生成額外的機器代碼測試......相反,他們通常會讓CPU對溢出做出反應併產生任何結果。
在CPU層面上,沒有真正的原因讓CPU在檢測到潛在溢出時無法擺脫困境,忽略附加或產生某種方式的異常:如果後者沒有傳播到OS /應用程序,或者被忽略他們,那麼可能會看到原來的價值。但是大多數CPU將帶符號類型的「+ 1」視爲與無符號類型相同,C/C++只需簡單地包裝模數2^#bits
......然後將其解釋爲有符號數取決於哪些有符號數申述正在使用中。對於某些語言和CPU,BCD值的積分操作可能是可能的 - 它們如何對溢出做出反應更難以推測。
在Java中,例如,如果代碼在多個線程中執行,則x == x + 1
也可能爲真。
在此期間另一個線程可能會修改x
,所以這種情況可能會最終成立。 爲了不被緩存,必須聲明變量x
。
- 1. addClass('x')總是返回false ...?
- 2. Mac OS X - 閱讀總是返回1
- 3. Droid X相機自動對焦回調總是返回false
- 4. (X <8)返回false當x = -3(雙)
- 5. C++ x + = 1 x ++和x = x + 1是不是一樣?
- 6. 使Ruby循環返回「x」圖像而不是x,整數
- 7. 返回數字數組是小於x
- 8. 爲什麼完整的Matlab數組(X)在'if X'中返回false?
- 9. 在Python中,x == x是否是False?
- 10. 對於1-D`X`,`X [n]`和`X [...,n]`有什麼區別?
- 11. 在Zp中是否((a^x)^ 1/x)== a? (對於Jablon協議)
- 12. 什麼時候是(true == x)=== !! x false?
- 13. Floor(X)模X等於X?
- 14. 總和等於X的數組值總和等於X
- 15. 爲什麼x <= x false?
- 16. Tensorflow相當於x的= X + 1
- 17. 相當於lapply(a,function(x)x [,1])
- 18. 爲什麼 - 〜x等於x + 1?
- 19. (Math.random()* x)+ y返回大於x + y的數字
- 20. x ++在裝配中比x = x + 1和x + = 1更有效嗎?
- 21. hasNextLine()總是返回false
- 22. LinqToTwitter - 對於ApplicationOnlyAuthorizer,IsAuthorized總是返回false
- 23. '對於數組中的x'總是導致排序的x? [Python的/ NumPy的]
- 24. 新雙[X]對矢量<double>(x),其中整數x是用戶指定
- 25. 的具體含義 - X是X + 1
- 26. $ x ++結果總是給出1
- 27. 從矢量選擇升[x]其中(L [X] - 1 [X-1])> 1
- 28. MySQL的圓(X,1)返回0.0和-0.0
- 29. Prolog X = f(X)。 (X)
- 30. Excel VBA循環x = x + 1
除非你重載'operator =='......否則它只是一個數學畸變。 :) –
大概'不',否則這將是一個毫無意義的問題! :) –
聲明哪裏'x'?它是否由多個線程更新?這是什麼語言? –