Mặc dù đọc phép toán bit không hiểu gì nhưng vẫn like
Challenge: Tìm số lớn nhất trong 5 số nguyên
Theo mình thì nếu dùng 5if thì nó là vét cạn còn nếu dùng <= 3if thì nó luôn tìm ra nghiệm gần đúng nhoặc đúng với nghiệm cần tìm. Nó cơ bản gần giống với thuật toán IDA(Iterative deepening search) giới hạn chiều sâu tìm kiếm. Nếu bạn làm những bài cơ bản về trí tuệ nhân tạo thì thấy nó khá là hay. Một chút ý kiến nho nhỏ xin đừng gạch đá.
Lấy trị tuyệt đối bản chất vẫn là if mà ?
cách này nếu đầu vào là số 64bits thì phải chỉnh lại, và còn tùy thuộc vào endianness nữa
Cùng hệ và shift không sợ endian. Chừng nào bạn pack hoặc dùng mask kiểu 0x8000… mới có vấn đề.
oh giờ mình mới biết endian không ảnh hưởng shift. cảm ơn bạn
Lỡ em lại dùng 64 thì chắc con này có cho kết quả đúng không? khi chỉ lấy bit đầu tiên của bác?
Đề bài chỉ nói là không dùng if thôi mà. Còn muốn dùng cái gì thì tuỳ người code chứ =)))
c >> (sizeof(c)*8 - 1)
thế này chắc là được
Chặn cho từng trường hợp thôi, mình chỉ làm thử trên int
nếu chỉ cần biết c < 0 hay c > 0 thì cho k = c < 0 luôn vẽ ra cái bit trick làm gì, đề ko yêu cầu if chứ có thể xài so sánh thoải mái mà
int max(int a, int b) { return a - (a < b) * (a - b); }
Cũng là một cách khác
ầy nhưng mà nhiều ngôn ngữ không cho phép làm như vậy, thuật toán đa ngôn ngữ vẫn hơn chứ
ngôn ngữ nào chả cho phép biến kiểu bool thành kiểu int, mất công viết thành 2-3 dòng thôi. Nếu ko cho thì đốt ngôn ngữ đó đi.
Ngay từ đầu đã nói ngôn ngữ nào cũng chơi tuốt thì càng phải sử dụng cú pháp đặc trưng chứ. Không thì chỉ có thể viết rặt 1 kiểu.
ko cho dùng mảng là hết mún làm
C# không ép từ bool sang int được.
Convert.ToInt32(a < b)
.NET Framework
Available since 1.1
Java hình như phải xài ? :, đề nghị đốt Java.
bác nghĩ so với phép dịch bit thì số phép tính của bác nhanh hay chậm hơn?
compile ra thấy 2 cái như nhau:
nó optimize xuống còn có 1 cái shr 31 là xong @_@
cái hàm 1 dòng thì bị dư thêm 1 lệnh xor eax eax set eax = 0 ko biết để làm gì @_@