30/09/2018, 19:04
[TEST] cách kiểm tra số chẵn, lẻ bằng phép toán trên bit ( num &1))
Đây là code thử nghiệm của mình.
#include <stdio.h>
int main()
{
for(int i=1; i<10; i++){
printf("%d ",i);
}
printf("
");
for(int i=1; i<10; i++){
printf("%d ",i&1);
}
}
OUTPUT:
1 2 3 4 5 6 7 8 9
1 0 1 0 1 0 1 0 1
Vấn đề đặt ra là cách kiểm tra này có đúng với mọi số không?
xin các pro chỉ giáo!
Bài liên quan
đúng với mọi số
Vì and, thì 2 bit phải cùng là 1 thì mới ra 1.
Nhưng số 1, ngoài bit bên phải cùng là 1 thì toàn bộ các bit khác của nó đều là 0.
-> Sẽ and ra 0 hết với các bit kia của số cần kiểm tra chẵn lẽ.
Vậy chỉ còn mỗi bit bên phải cùng của số cần kt, nếu bit đó là 1
-> 1&1 = 1 -> lẻ
nếu là 0
-> 0&1 = 0 -> chẵn
Với số âm thì chưa chắc đúng đâu nhé
Số âm có số chẵn số lẽ à??
số âm cũng đúng với mọi số. Vì a + (-a) = 0 nên nếu a lẻ thì -a cũng lẻ. a chẵn thì -a cũng chẵn, hay nếu bit đầu tiên của a là 1 thì bit đầu tiên của -a cũng là 1 (tương tự với a chẵn) vì nếu bit đầu tiên của -a là 0 mà bit đầu tiên của a là 1 thì a + (-a) ko thể ra 0 được.
nhưng nói chung thì phép toán trên bit nên thực hiện với số dương, số âm thì hên xui
số âm cũng cũng biểu diễn ở dạng bít được mà! bỏ bit âm đi oy so sánh như số dương được không mấy chế nhể!.
Âm hay dương là do máy hiểu thôi.
http://www.programminglogic.com/how-computers-represent-negative-binary-numbers/
do mấy cái này nên không đơn giản là bỏ bit đi đâu, còn như chế trên bảo lấy phần bù là số dương thì lại chưa chắc tốc độ của phép tính theo kiểu bit này làm nhanh hơn so với phép lấy mod nữa
theo wiki thì chỉ cần là số nguyên thì sẽ thuộc 1 trong 2 loại chẵn hoặc lẻ