IO型--从main函数开始写,要写输入、计算、输出
接口型--不需要写主函数,默认主函数是存在的,你只需要完成函数就行
(12条消息) C语言丨关键字signed和unsigned 的使用与区别详解_Emily-C的博客-CSDN博客_signed unsigned
十进制中10的32位二进制表示为0000 0000 0000 0000 0000 0000 0000 1010,其中有两个1。
负数使用补码表示 ,-1的32位二进制表示为1111 1111 1111 1111 1111 1111 1111 1111,其中32个1
- int NumberOf1(unsigned int n) //unsigned无符号
- {
- int count = 0;
- while (n)
- {
- if (n % 2 == 1)
- count++;
- n = n / 2;
- }
- return count;
- }
n=n&(n-1)
n=11(10进制)
n=1011
n-1=1010
n&(n-1)=1010
- int NumberOf1(int n)
- {
- int count = 0;
- while (n)
- {
- n = n & (n - 1);//
- count++;
- }
- return count;
- }
- void Print(int n)
- {
- int i = 0;
- printf("奇数位: ");
- for (i = 30; i >=0; i -= 2)
- {
- printf("%d ", (n >> i) & 1);
- }
- printf("\n");
-
- printf("偶数位: ");
- for (i = 31; i >= 1; i -= 2)
- {
- printf("%d ", (n >> i) & 1);
- }
- printf("\n");
- }
-
-
-
- int main()
- {
- int n = 0;
- scanf("%d", &n);
- Print(n);
- return 0;
- }
(1)
- int Dif(int n, int m)
- {
- int i = 0;
- int count = 0;
- for (i = 0; i < 32; i++)
- {
- if (((n >> i) & 1) != ((m >> i) & 1))
- {
- count++;
- }
- }
- return count;
- }
-
- int main()
- {
- int n = 0;
- int m = 0;
- scanf("%d %d", &n, &m);
- int ret=Dif(n,m);
- printf("%d\n", ret);
- return 0;
- }
(2)
在C语言里这个符号“ ∧ ”表示“按位异或”运算符。
例:
^ 按位异或
AND (位与&) OR ( 位或| ) XOR ( 位异或^ )
1 & 1 = 1, 1 | 1 = 1, 1 ^ 1 = 0
1 & 0 = 0, 1 | 0 = 1, 1 ^ 0 = 1
0 & 1 = 0, 0 | 1 = 1, 0 ^ 1 = 1
0 & 0 = 0, 0 | 0 = 0, 0 ^ 0 = 0
//异或操作符
//相同为0,相异为1
- int Dif(int n, int m)
- {
- int count = 0;
- int tmp = m ^ n;//相同为0,相异为1
- while (tmp)
- {
- tmp = tmp & (tmp - 1);//去掉最右边的1
- count++;
- }
- return count;
- }
-
- int main()
- {
- int n = 0;
- int m = 0;
- scanf("%d %d", &n, &m);
- int ret=Dif(n,m);
- printf("%d\n", ret);
- return 0;
- }