鹏哥C语言86-1---第14次作业:操作符的使用

#define _CRT_SECURE_NO_WARNINGS

cpp 复制代码
#include <stdio.h>
#include <string.h>

//--------------------------------------------------------------------------------第14次作业:操作符的使用

//-----------------------------------------------------------------------------------1.位操作符

&----按(2进制补码)位与(全1 为 1)

| ----按(2进制补码)位或(有1则1,全0则0)

^ ----按(2进制补码)位异或(相同为0,相异为1)

//-----------------------------------------------------------------------------------2.代码结果

下列代码结果为 B

cpp 复制代码
int main()
{
    int a, b, c;
    a = 5;
    c = ++a;
    b = ++c, c++, ++a, a++; //逗号表达式,b = ++c 这是一个表达式,c++这是第二个表达式
    b += a++ + c;
    printf("a =%d b =%d c =%d\n:", a, b, c);
    return 0;
}

A.a = 8 b = 23 c = 8

B.a = 9 b = 23 c = 8

C.a = 9 b = 25 c = 8

D.a = 9 b = 24 c = 8

//---------------------------------------------------------------------------------5.编程题:统计2进制中1的个数

//写一个函数返回参数的2进制中1 的个数

//--------------------------------------------------------------方法1

cpp 复制代码
//int Num(int a) // 只能算正数
int Num(unsigned int a)  //改成无符号数
{
    int count = 0;
    //转化为2进制 %2 /2
    while (a)
    {
        if ((a % 2) == 1)
        {
            count++;
        }
        a = a / 2;
    }
    return count;
}

//--------------------------------------------------------------方法2:按位与&

cpp 复制代码
int Num(int a)
{
    int count = 0;
    int i = 0;
    for (i = 0; i < 32; i++) //循环32次,效率略低
    {
        if (((a >> i) & 1) == 1) 
        //把 a 二进制序列中的每一位数,依次右移 i 位,都跟1按位与一遍,
        //如果结果为1,则说明 a 的该位为1,则计数
        {
            count++;
        }
    }
    return count;
}

//--------------------------------------------------------------方法3:n=n&(n-1)

//如果要判断一个数是不是2的n次方?

if(n&(n-1)==0)

{

printf("是2的n次方");

}

//1000 n ---------2的n次方 n&(n-1)==0

//0111 n-1

cpp 复制代码
int Num(int a)
{
    int count = 0;
    while (a)
    {
        a = a & (a - 1);
        count++;
    }
    return count;
}

//n = 15

//n = n&(n-1)

//1111 n

//1110 n-1

//1110 n

//1101 n-1

//1100 n

//1011 n-1

//1000 n

//0111 n-1

//0000 n

//--------------------------------------------------主函数

cpp 复制代码
int main()
{
    int a = 0;
    scanf("%d", &a);
    int ret = Num(a);
    printf("%d\n", ret);
    return 0;
}

//----------------------------------------------------------------------3.编程题:求两个数二进制中不同位的个数

两个整型(32位)整数m和n的二进制表达式中,有多少个位不同

输入 1999 2299

输出 7

//----------------------------------------------方法一:两个数同时 按位与&1 相比较

cpp 复制代码
int Num(int x, int y)
{
    int count = 0;
    int i = 0;
    for (i = 0; i < 32; i++) //循环32次
    {
        if (((x >> i) & 1) != ((y >> i) & 1))
        {
            count++;
        }
    }
    return count;
}

//----------------------------------------------方法二:^异或操作符

cpp 复制代码
int Num(int x, int y)
{
    int count = 0;
    int n = x ^ y;  //对应2进制位,相同为0,相异为1
    while (n)
    {
        n = n & (n - 1);      // 统计  x ^ y 中 有几个1
        count++;
    }
    return count;
}

//--------------------------------------------------------------主函数

cpp 复制代码
int main()
{
    int a = 0;
    int b = 0;
    scanf("%d %d", &a, &b);
    int ret = Num(a, b);
    printf("%d\n", ret);
    return 0;
}

//----------------------------------------------------------4.编程题:打印整数二进制的奇数位和偶数位

获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出2进制序列

cpp 复制代码
int main()
{
    int a = 0;
    scanf("%d", &a);
    int i = 0;
    //获取奇数位
    for (i = 30; i >= 0; i -= 2)
    {
        printf("%d ", ((a >> i) & 1));
    }
    printf("\n");
    //获取偶数位
    for (i = 31; i >= 1; i -= 2)
    {
        printf("%d ", ((a >> i) & 1));
    }

    return 0;
}

//----------------------------------------------------------------------6.编程题:交换两个变量,不创建临时变量

不允许创建临时变量,交换两个整数的内容

cpp 复制代码
int main()
{
    int a = 3;
    int b = 5;
    //---------------------------------------创建临时变量
    int c = 0;
    printf("交换前a=%d b=%d\n", a, b);
    c = a;
    a = b;
    b = c;
    printf("交换后a=%d b=%d\n", a, b);

    //----------------------------------------异或^操作符
    printf("交换前a=%d b=%d\n", a, b);
    a = a ^ b;  //a=3^5
    b = a ^ b;  //b=3^5^5-->b=3
    a = a ^ b;  //a=3^5^3-->a=5
    printf("交换后a=%d b=%d\n", a, b);

    return 0;
}
相关推荐
禾叙_几秒前
【langchain4j】结构化输出(六)
java·开发语言
NQBJT2 分钟前
VS Code配置Python人工智能开发环境
开发语言·人工智能·vscode·python
byoass9 分钟前
智巢AI知识库深度解析:企业文档管理从大海捞针到精准狙击的进化之路
开发语言·网络·人工智能·安全·c#·云计算
勤劳的进取家18 分钟前
数据链路层基础
网络·学习·算法
南境十里·墨染春水21 分钟前
C++笔记 STL——set
开发语言·c++·笔记
L16247622 分钟前
Win11 共享→Windows Server 访问故障总结(极简可复用)
开发语言·windows·php
dgaf33 分钟前
DX12 快速教程(17) —— 立体图标与合并渲染
c语言·c++·3d·图形渲染·d3d12
Advancer-35 分钟前
第二次蓝桥杯总结(上)
java·算法·职场和发展·蓝桥杯
.柒宇.1 小时前
FastAPI 基础指南:从入门到实战
开发语言·python·fastapi
ん贤1 小时前
加密算法(对称、非对称、哈希、签名...)
算法·哈希算法