Có phải là số không (-0) tương đương với số không (0) trong C# không?Có phải là số không (-0) tương đương với số không (0) trong C#
Trả lời
Đối với các số nguyên, không có đại diện nhị phân nào tạo ra sự khác biệt giữa 0 và -0, vì vậy chúng theo định nghĩa bằng nhau.
Đối với các số dấu phẩy động IEEE, có sự khác biệt về số không âm và dương. Tôi đã thực hiện một số thử nghiệm (CLR của .NET Framework 2.0, C# 3) và có vẻ như chúng được coi là bình đẳng, đó thực sự là hành vi được mong đợi theo tiêu chuẩn IEEE 754.
Đây là mã thử nghiệm của tôi để chứng minh rằng:
double minusOne = -1.0;
double positiveZero = 0.0;
double negativeZero = minusOne*positiveZero;
Console.WriteLine("{0} == {1} -> {2}", positiveZero, negativeZero, positiveZero == negativeZero);
Console.WriteLine("Binary representation is equal: {0}", BitConverter.DoubleToInt64Bits(positiveZero) == BitConverter.DoubleToInt64Bits(negativeZero));
Returns:
0 == 0 -> True
Binary representation is equal: False
'double negativeZero = -0.0' cũng mang lại kết quả tương tự, có nghĩa là hằng số' -0.0' được phân tích cú pháp chính xác thành giá trị "số không âm" của giá trị gấp đôi. – Lucero
Đối thập phân, có ít nhất 4 loại số không:
Decimal zero = Decimal.Zero;
Decimal negativeZero1 = new Decimal(0, 0, 0, true, 0);
Decimal negativeZero2 = -0.0m;
Decimal negativeZero3 = Decimal.Negate(Decimal.Zero);
Trong khi tất cả được bằng và được in ra dưới dạng "0"
, chúng có biểu diễn bit khác nhau:
zero: {0x00000000 00000000 00000000 00000000 }
negativeZero1: {0x00000000 00000000 00000000 80000000 }
negativeZero2: {0x00000000 00000000 00000000 80010000 }
negativeZero3: {0x00000000 00000000 00000000 80000000 }
+1 - nhưng: nhị phân của bạn 'negativeZero1' và' negativeZero3' trông khá giống với tôi? – Lucero
- 1. Tương đương với argv [0] của Go là gì?
- 2. Có phải Len (cell.Value) = 0 và cell.Value = "" tương đương trong Excel không?
- 3. In của Python "0" * 5 tương đương trong C#
- 4. In số 0 đứng đầu trong C?
- 5. '\ 0' trong C++ là gì?
- 6. Scala Số init với hằng số 0
- 7. Tương đương jQuery với document.forms [0] .elements [i] .value ;?
- 8. Số nguyên với số 0 hàng đầu
- 9. Hướng dẫn là tất cả 0 (số không)?
- 10. C# 0-1 Knapsack Vấn đề với số tiền và số 0 đã biết trong tập hợp
- 11. Có tương đương với tĩnh của C trong C# không?
- 12. Câu lệnh VB "Chr (0)" tương đương với C# là gì?
- 13. Tháng không có số 0 đứng đầu trong Android
- 14. Chữ số 0-số trong chuỗi
- 15. Chia cho số 0 bằng không
- 16. F # tương đương với số
- 17. Cách định dạng số 0..9 để hiển thị với 2 chữ số (KHÔNG phải là ngày)
- 18. Có phải tiêu chuẩn cho #if để giả sử các hằng số biểu tượng không xác định là 0 không?
- 19. Ruby strftime: Tháng không có số 0 đứng đầu?
- 20. Có số nguyên tương đương với __toString()
- 21. Ngày PHP(): phút mà không có số 0 đứng đầu
- 22. tương đương của p [0] và * p với nhiều loại mảng không đầy đủ
- 23. Tại sao `null> = 0 && null <= 0` nhưng không phải` null == 0`?
- 24. jQuery: mảng zero vs hàm nhận số không: [0] so với get (0)
- 25. Chấm dứt chuỗi - char c = 0 vs char c = '\ 0'
- 26. Khi nào một giới hạn của UIView.origin không phải là (0, 0)?
- 27. Có phải $ PROGRAM_NAME giống với $ 0 bằng ruby không?
- 28. Có tương đương C++ với getcwd không?
- 29. Số ký tự ['0' .. '9'] có bắt buộc phải có các giá trị số liên tiếp không?
- 30. Trong C, địa chỉ của con trỏ có phải là 0 không?
Có vẻ như một cái gì đó bạn có thể có một cách dễ dàng thử nghiệm bản thân. –
Tôi chỉ muốn kiểm tra xem có bất kỳ ẩn số chưa biết nào - nếu bạn biết ý tôi là gì? – Ben
@Evan - kiểm tra rõ ràng liệu 0 == -0 có tầm thường không, và thực sự tôi đã thực hiện kiểm tra này trước khi đăng. Lưu ý từ "tương đương" của tôi. Tôi đang tìm kiếm cuộc thảo luận xung quanh câu hỏi, tất cả chúng ta đều có. Nhờ Lucero nói riêng. – Ben