首页 > 其他分享 >逍遥自在学C语言 位运算符 "|" 的5种高级用法

逍遥自在学C语言 位运算符 "|" 的5种高级用法

时间:2023-04-11 23:45:22浏览次数:36  
标签:main 字节 逍遥自在 C语言 运算符 int printf include

前言

在上一篇文章中,我们介绍了&运算符的高级用法,本篇文章,我们将介绍| 运算符的一些高级用法。

一、人物简介

  • 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。

  • 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。

二、将两个字节合并成一个16位整数

#include <stdio.h>

int main() 
{
    unsigned char lowByte = 0x12;   // 0001 0010
    unsigned char highByte = 0x34;  // 0011 0100
    unsigned short result = (highByte << 8) | lowByte;  // 0011 0100 0001 0010
    printf("合并结果为 %04x\n", result);       // 输出: 0x3412
    return 0;
}

三、将一个字节的低4位和高4位交换

#include <stdio.h>

int main() 
{
    unsigned char data = 0xab;   // 1010 1011
    data = (data << 4) | (data >> 4);  // 1011 1010
    printf("交换结果为 %02x\n", data);      // 输出:0xba
    return 0;
}

四、将一个字节中的某些位置1

#include <stdio.h>
int main() 
{
    int x;
    printf("请输入一个数:");
    scanf("%d", &x);
    printf("\n第4位置1后,这个数变为 %d\n", x | 0b1000); 
    return 0;
}

五、将一个字节中的某些位置0

#include <stdio.h>
int main() {
    int x;
    int a = 0b1000; 
    printf("请输入一个数:");
    scanf("%d", &x);
    printf("\n第4位置0后,这个数变为 %d\n", (x | a) - a ); 
    return 0;
}

六、将低位连续的0变为1

#include <stdio.h>
int main() 
{
    int x;
    printf("请输入一个数:");
    scanf("%d", &x);
    printf("\n低位连续的0变为1,这个数变为%d\n", x | (x-1) );
    return 0;
}


小结

通过这篇文章,我们学会了用位运算符|的5种高级用法

​ 1、将两个字节合并成一个16位整数

​ 2、将一个字节的低4位和高4位交换

​ 3、将一个字节中的某些位置1

​ 4、将一个字节中的某些位置0

​ 5、将低位连续的0变为1

在下一篇文章中,我们将介绍位运算符^的一些高级用法。

标签:main,字节,逍遥自在,C语言,运算符,int,printf,include
From: https://www.cnblogs.com/Wayne123/p/17308307.html

相关文章

  • C语言矩阵顺时针旋转90度和力扣34. 在排序数组中查找元素的第一个和最后一个位置
    #include<iostream>usingnamespacestd;#defineM5#include<stdlib.h>//原矩阵,某元素第n行第m列,;顺时针旋转90度后,位置变成倒数第n列,第m行//即先转置再水平翻转intn=0;voidrotation_90(intmatrix[][M],intn){ for(inti=0;i<n;i++) { for(intj=i;j<M;j++)......
  • 运算符的使用
    运算符的应用1.赋值运算符varusername="tom";//简单赋值运算符复合运算符a+=b;//相当于a=a+ba-=b;//相当于a=a-ba*=b;//相当于a=a*ba/=b;//相当于a=a/ba%=b;//相当于a=a%ba&=b;//相当于a=a&ba|=b;//相当于a=a|ba^=b;//相当......
  • C语言变量范围,打印格式
    int:               -2147483648~2147483647long:             -2147483648~2147483647           2147483647:linux2038问题    打印格式%ld   unsignedlong %lulonglong:    ......
  • 三日一练-C语言百题(001-005)
    进制转换:1//C语言算法:十进制转为二进制2#include<stdio.h>3intmain()4{5intb,i,c=0,a[30];6scanf("%d",&b);7while(b!=0)8{9i=b%2;10a[c]=i;11c++;12b=b/2;......
  • 三日一练-C语言百题(006)
    进制转换:16进制转10进制1//201803062C语言十六进制字符串转十进制3需求:比如我有一个字符串,定义为char*a=“2B4AFF8071”,里面是十六进制表示,4我要每次依次取其中两位比如2B,转换成十进制“43”,然后再存入另一个字符串char*b或5字符数组charb[],接着取4A,依次......
  • 57、K8S-监控机制-Prometheus-PromQL基础-运算符、聚合、功能函数
    Kubernetes学习目录1、数据基础1.1、时间序列1.1.1、介绍时间序列数据:按照时间顺序记录系统、设备状态变化的数据,每个数据称为一个样本;数据采集以特定的时间周期进行,因而,随着时间流逝,将这些样本数据记录下来,将生成一个离散的样本数据序列;该序列也称为向量(Vector);而将多个序......
  • C语言中的位运算符和源码反码补码的浅解
    位运算符【与(&);或(|);非(~);异或(^);移位运算符(<<和>>)】对于有符号(正负)的而言:1)二进制的最高位是符号位:0表示正数,1表示负数2)正数的原码,反码,补码都一样3)负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)4)负数的补码=它的反码+1 5) 0在计算机种分+0与-0,它们的原码,补码,反码......
  • 逍遥自在学C语言 | 位运算符&的高级用法
    前言在上一篇文章中,我们介绍了&运算符的基础用法,本篇文章,我们将介绍&运算符的一些高级用法。一、人物简介第一位闪亮登场,有请今后会一直教我们C语言的老师——自在。第二位上场的是和我们一起学习的小白程序猿——逍遥。二、位掩码位掩码是一种用于按位操作的......
  • 01 | C语言异常处理(jmp_buf、setjmp、longjmp)
    首先说明,C语言中的异常处理主要还是错误码的思路.其次,C语言中是有返回两次的函数的,比如说fork()函数在C语言中是没有trycatch块的,但并不代表没有异常处理。接下来我们简单明确三个概念,最后来一个简单的小例子。1.三个概念使用一个jmp_buf的类型变量来充当异常......
  • C语言学习第五天
    打字练习软件typespeed  1、安装:sudoapt-getinstalltypespeed  2、打开typespeed保证窗口至少80*24一、Windows下获取方向键:  1、导入#include<conio.h>  2、通过getch()的返回值获取键盘上的键值    上:72 下:80 左:75 右:77二、Lin......