鹏哥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;
}
相关推荐
锦***林20 分钟前
用 Python 写一个自动化办公小助手
开发语言·python·自动化
GilgameshJSS23 分钟前
STM32H743-ARM例程24-USB_MSC
c语言·arm开发·stm32·单片机·嵌入式硬件
小莞尔39 分钟前
【51单片机】【protues仿真】基于51单片机电压测量多量程系统
c语言·单片机·嵌入式硬件·物联网·51单片机
程序员老舅1 小时前
C++参数传递:值、指针与引用的原理与实战
c++·c/c++·值传递·引用传递·指针传递·参数传递机制
hadage2332 小时前
--- 数据结构 AVL树 ---
数据结构·算法
liu****2 小时前
8.list的使用
数据结构·c++·算法·list
立志成为大牛的小牛2 小时前
数据结构——二十六、邻接表(王道408)
开发语言·数据结构·c++·学习·程序人生
祈祷苍天赐我java之术2 小时前
Redis 数据类型与使用场景
java·开发语言·前端·redis·分布式·spring·bootstrap
阿拉丁的梦2 小时前
后期材质-屏幕冲击径向模糊
算法·材质
weixin_429630262 小时前
实验二-决策树-葡萄酒
算法·决策树·机器学习