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!

*grab popcorn* viết 21:16 ngày 30/09/2018

đú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

Quân viết 21:07 ngày 30/09/2018

Với số âm thì chưa chắc đúng đâu nhé

hacked viết 21:15 ngày 30/09/2018

Số âm có số chẵn số lẽ à??

viết 21:14 ngày 30/09/2018

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

Leng Keng viết 21:14 ngày 30/09/2018

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ể!.

Minh Hoàng viết 21:13 ngày 30/09/2018

Âm hay dương là do máy hiểu thôi.

Quân viết 21:16 ngày 30/09/2018

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

Quân viết 21:12 ngày 30/09/2018

theo wiki thì chỉ cần là số nguyên thì sẽ thuộc 1 trong 2 loại chẵn hoặc lẻ

Bài liên quan
0