鹏哥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;
}
相关推荐
ZC跨境爬虫几秒前
跟着 MDN 学JavaScript day_4:如何存储你需要的信息——变量
开发语言·前端·javascript·ui·ecmascript
18922804861几秒前
NV077固态MT29F16T08ESLCHL6-QAES:C
c语言·开发语言·性能优化
小小de风呀2 分钟前
de风——【从零开始学C++】(十三):优先级队列 priority_queue 全解析 & 仿函数入门
开发语言·c++
8Qi83 分钟前
LeetCode 198:打家劫舍(House Robber)—— 题解 ✅
算法·leetcode·动态规划
糖果店的幽灵4 分钟前
时间序列处理
开发语言·python·pandas
王老师青少年编程6 分钟前
信奥赛C++提高组csp-s之搜索进阶(记忆化搜索案例实践1)
c++·记忆化搜索·搜索·信奥赛·csp-s·提高组·滑雪
无限码力6 分钟前
华为非AI方向0603笔试真题-爆破小游戏(详细思路+多语言题解)
算法·华为·华为笔试真题·华为非ai笔试真题
light blue bird10 分钟前
3C 数码电子BOM 协同工作台组件
java·开发语言·jvm·windows·.net·桌面端
wunaiqiezixin11 分钟前
扫描线算法
算法
落羽的落羽11 分钟前
【项目】JsonRpc框架——功能测试、项目总结
linux·服务器·开发语言·c++·qt·算法·机器学习