Tôi muốn luônYêu cầu được gán một số dương với tất cả các giá trị có thể cho lareValue1 và largeValue2 (đây là ít nhất 1).Tôi có thể ngăn chặn tràn số nguyên trong C# bằng cách sử dụng dịch chuyển phải không dấu?
Tuyên bố sau đây gây ra một lỗi tràn bộ đệm:
int alwaysPositive = (largeValue1 + largeValue2)/2;
Tôi biết tôi có thể ngăn chặn nó bằng cách trừ đi và nói thêm:
int alwaysPositive = largeValue1 + ((largeValue2 - largeValue1)/2);
Nhưng trong ngôn ngữ lập trình khác tôi có thể sử dụng một bitshift unsigned làm mẹo:
int alwaysPositive3 = (largeValue1 + largeValue2) >>> 1;
Làm cách nào để thực hiện điều này trong C#?
Câu trả lời dưới đây giải quyết được vấn đề. Có lẽ rất nhiều cách để làm điều này, nhưng tất cả chúng (bao gồm cả các giải pháp của tôi) có một điểm chung: tất cả chúng đều trông khó hiểu.
Tha thứ cho sự thiếu hiểu biết của tôi, nhưng tại sao bạn lại muốn làm điều này? –
Lý do tôi cố gắng làm điều này là phát minh lại bánh xe: thực hiện tìm kiếm nhị phân. Tại sao tôi lại viết phiên bản của riêng mình? Tôi không biết ... – Paco
Chỉ cần thông tin, các mẫu mã của bạn làm những việc khác nhau. Tôi nghĩ rằng bạn muốn dấu ngoặc đơn trong lần đầu tiên. PS. Bạn có được lấy cảm hứng từ http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html không? –