Sau đây sẽ làm việc trong C/C++ bởi vì nó không có hỗ trợ lớp đầu tiên cho booleans, nó xử lý mọi biểu thức với bit "on" trên chúng là true false. Trong thực tế, đoạn mã sau sẽ không hoạt động trong C# hoặc Java nếu x và y thuộc loại số.
if (x | y)
Vì vậy, các phiên bản rõ ràng mã trên là:
if ((x | y) != 0)
Trong C, bất kỳ biểu hiện đó sẽ có một "On" chút về họ, kết quả là true
int i = 8 ;
nếu (i) // hợp lệ trong C, kết quả là đúng
int joy = -10;
if (niềm vui) // vaild trong C, kết quả là true
Bây giờ, trở lại C#
Nếu x và y là kiểu số, mã của bạn: if (x | y) sẽ không làm việc. Bạn đã thử biên dịch chưa? Nó sẽ không hoạt động
Nhưng đối với mã của bạn, mà tôi có thể giả định x và y là các loại boolean, do đó, nó sẽ làm việc, do đó, sự khác biệt giữa | và || đối với các kiểu boolean, || ngắn mạch, | không phải là.Kết quả các nội dung sau:
static void Main()
{
if (x | y)
Console.WriteLine("Get");
Console.WriteLine("Yes");
if (x || y)
Console.WriteLine("Back");
Console.ReadLine();
}
static bool x
{
get { Console.Write("Hey"); return true; }
}
static bool y
{
get { Console.Write("Jude"); return false; }
}
là:
HeyJudeGet
Yes
HeyBack
Jude sẽ không được in hai lần, || là toán tử boolean, nhiều toán tử boolean có nguồn gốc từ C là ngắn mạch được lưu hành, biểu thức boolean có hiệu suất cao hơn nếu chúng được đoản mạch.
Đối với thuật ngữ người thường, khi bạn nói ngắn mạch, ví dụ: || (hoặc toán tử), nếu biểu thức đầu tiên đã đúng, không cần đánh giá biểu thức thứ hai. Ví dụ: if (answer == 'y' || answer == 'Y'), nếu người dùng nhấn y nhỏ, chương trình không cần đánh giá biểu thức thứ hai (answer == 'Y'). Đó là ngắn mạch.
Trên mã mẫu của tôi ở trên, X là đúng, vì vậy Y trên || toán tử sẽ không được đánh giá thêm, do đó không có đầu ra "Jude" thứ hai.
Không sử dụng loại mã này trong C# ngay cả khi X và Y thuộc loại boolean: nếu (x | y). Không biểu diễn.
| có ý nghĩa khác trong C#. Đó có thể là lý do tại sao. – jalf
Thật đáng ngạc nhiên khi bạn đã bình chọn, vì câu trả lời hoàn toàn không liên quan đến câu hỏi ... – Guffa