C基础第16课 位运算符分析

学习自狄泰软件学院唐佐临老师C语言课程,文章中图片取自老师的PPT,仅用于个人笔记。


实验1
实验2 :交换两个整形变量的值方法一 :定义中间变量,麻蛋 低级
实验3 :交换两个整形变量的值方法二 :部分和 ,但是不能满足两个非常大的int型数据相加结果溢出int类型范围的情况
实验4 :交换两个整形变量的值方法三 :位运算 按位异或,最简洁 最高效
实验5:按位或按位与 VS 逻辑或逻辑与


在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

实验1

在这里插入图片描述

结论:
1 四则运算的优先级高于位运算

2 在位运算中,右操作数的范围必须是:[0,31],向上面最后一个打印,3 << -1 的值,完全由编译器生产厂商来决定 一个整移位-1 倒是是什么,这里gcc编译器比较有意思,gcc编译器的生产厂商认为 左移-1 就是 右移 1,但是其他的编译器又有其他自己的规定,所以一定要注意 在位运算中,右操作数的范围必须是:[0,31]!!!!

在这里插入图片描述

实验2 :交换两个整形变量的值方法一 :定义中间变量,麻蛋 低级

扫描二维码关注公众号,回复: 8795067 查看本文章
#include <stdio.h>

#define SWAP1(a, b)    \
{                      \
    int t = a;         \
    a = b;             \
    b = t;             \
}

int main()
{
    int a = 1;
    int b = 2;
    
    
    printf("a = %d\n", a); 
    printf("b = %d\n", b); 
    
    SWAP1(a ,b);
    
    printf("a = %d\n", a); 
    printf("b = %d\n", b); 
    
    return 0;
}

在这里插入图片描述

实验2 :交换两个整形变量的值方法二 :部分和 ,但是不能满足两个非常大的int型数据相加结果溢出int类型范围的情况

#include <stdio.h>

#define SWAP2(a, b)    \
{                      \
    a = a + b;         \
    b = a - b;         \
    a = a - b;         \
}

int main()
{
    int a = 1;
    int b = 2;
    
    
    printf("a = %d\n", a); 
    printf("b = %d\n", b); 
    
    SWAP2(a ,b);
    
    printf("a = %d\n", a); 
    printf("b = %d\n", b); 
    
    return 0;
}

在这里插入图片描述

实验3 :交换两个整形变量的值方法三 :位运算 按位异或,最简洁 最高效

#include <stdio.h>

#define SWAP3(a, b)    \
{                      \
    a = a ^ b;         \
    b = a ^ b;         \
    a = a ^ b;         \
}

int main()
{
    int a = 1;
    int b = 2;
    
    
    printf("a = %d\n", a); 
    printf("b = %d\n", b); 
    
    SWAP3(a ,b);
    
    printf("a = %d\n", a); 
    printf("b = %d\n", b); 
    
    return 0;
}

在这里插入图片描述

在这里插入图片描述

实验4:按位或按位与 VS 逻辑或逻辑与

按位或按位与
在这里插入图片描述

逻辑或逻辑与
在这里插入图片描述

在这里插入图片描述

发布了192 篇原创文章 · 获赞 100 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/LinuxArmbiggod/article/details/103653531
今日推荐