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

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

时间:2023-04-14 23:44:20浏览次数:48  
标签:main 0xF8 示例 逍遥自在 C语言 运算符 int include

前言

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

一、人物简介

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

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

二、计算2的整数次幂

  • 代码示例
#include <stdio.h>
int main() 
{
    int x = 1;
    printf("请输入2的次方数:");
    scanf("%d",&x);
    int y = 1 << x; 
    printf("\n2的%d次方 = %d\n",x,y);
    return 0;
}
  • 运行结果

三、将一个字节序列合并为一个整数

  • 例如,将4个字节组成的字节序列b合并为一个整数
  • 代码示例
#include <stdio.h>

int main() 
{
    unsigned char b[4] = {0x12, 0x34, 0x56, 0x78};
    unsigned int x = ((unsigned int)b[0] << 24) | ((unsigned int)b[1] << 16) |((unsigned int)b[2] << 8) | ((unsigned int)b[3]);
    printf("合并后的整数 = 0x%08x\n", x);
    return 0;
}
  • 运行结果

下面介绍的两种用法,会用到& | ^的知识

如果有不清楚的,可以查看之前的文章:位运算符的基础用法

四、标记码

1、标记位置1

  • 例如,将0xF8的第2位(从第0位开始数,由低位到高位) 置1
  • 代码示例
#include <stdio.h>
int main() 
{
    int x = 0xF8;
    x |= 1<<2; 
    printf("x = 0x%0x\n",x);
    return 0;
}
  • 运行结果

2、标记位置0

  • 例如,将0xF8的第3位(从第0位开始数,由低位到高位) 置0
  • 代码示例
#include <stdio.h>
int main() 
{
    int x = 0xF8;
    x &= (~(1<<3)); 
    printf("x = 0x%0x\n",x);
    return 0;
}
  • 运行结果

3、标记位取反

  • 例如,将0xF8的第3位和第2位(从第0位开始数,由低位到高位) 取反
  • 代码示例
#include <stdio.h>
int main() 
{
    int x = 0xF8;
    x ^= (3<<2);  // 3的二进制为0b11,左移2位刚好对应第2和第3位
    printf("x = 0x%0x\n",x);
    return 0;
}
  • 运行结果

五、掩码

1、末尾连续N位都置1

  • 例如,将0xF8的低3位都置1
  • 代码示例
#include <stdio.h>
int main() 
{
    int x = 0xF8; // Ob1111 1000 
    x |= ((1<<3)-1);
    printf("x = 0x%0x\n",x); // 0b1111 1111
    return 0;
}
  • 运行结果

2、末尾连续N位都置0

  • 例如,将0xFF的低4位都置0
  • 代码示例
#include <stdio.h>
int main() 
{
    int x = 0xFF;	// 0b1111 1111
    x &= ~((1<<4)-1);
    printf("x = 0x%0x\n",x); // 0b1111 0000
    return 0;
}
  • 运行结果

3、末尾连续N位取反

  • 例如,将0xFA的低4位都取反
  • 代码示例
#include <stdio.h>
int main() 
{
    int x = 0xFA;	// 0b1111 1010
    x ^= ((1<<4)-1);
    printf("x = 0x%0x\n",x); // 0b1111 0101
    return 0;
}
  • 运行结果

小结

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

1、计算2的整数次幂

2、将一个字节序列合并为一个整数

3、标记码

4、掩码

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

标签:main,0xF8,示例,逍遥自在,C语言,运算符,int,include
From: https://www.cnblogs.com/Wayne123/p/17320266.html

相关文章

  • c语言实现矩阵相乘
    一、问题描述。用动态二维数组的知识进行矩阵相乘。二、设计思路。1、申请两个动态二维数组。2、输入两个矩阵的行数和列数。3、如果满足前一个矩阵的列数等于第二个矩阵的行数,就让前一个矩阵的x行的第y个元素乘以后一个矩阵的x列的第y的元素。4、以矩阵的形式输出。三、程......
  • 数据类型和运算符
    1.整数类型TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)、BIGINT2.浮点数类型和定点数类型浮点类型:FLOAT、DOUBLE。定点类型:DECIMAL3.日期与时间类型DATETIME、DATE、TIMESTAMP、TIME、YEAR4.字符串类型CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET5.二进制类型BI......
  • 三门问题的简单c语言代码
    inti,n,stayWins=0,switchWins=0;srand(time(NULL));printf("请输入尝试次数:");scanf("%d",&n);for(i=0;i<n;i++){prizeDoor=rand()%3+1;guess=rand()%3+1;do{open=rand()%3+1;......
  • C语言-指针
    C语言-指针指针是C语言中广泛使用的一种数据类型。运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构;能很方便地使用数组和字符串;并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。学习指针是学习C语言中最重要的一环,......
  • C语言报错
    1、Useofundeclaredidentifier'SPIT_FLAG_TIMEOUT'  解决:使用未定义的标识符:SPIT_FLAG_TIMEOUT没有定义,但用#define修饰的语句又不标红。......
  • C语言函数大全--g开头的函数(下)
    C语言函数大全本篇介绍C语言函数大全--g开头的函数(下)17.getmodename17.1函数说明函数声明函数功能char*getmodename(intmode_name);获取指定的图形模式名17.2演示示例#include<graphics.h>#include<stdlib.h>#include<stdio.h>intmain(void){......
  • COMP30023 C语言题析
    COMP30023:IntroductiontoprojectsMarch24,20231IntroductionInthisdocument,wewillintroducehowCOMP30023projectsarestructured,andoutlinehowyoucanmakethemostfromtheinfrastructurewhichweprovide.Firstly,someattributesandexpectatio......
  • Python与c语言的区别与联系
    Python与c语言都是一种机器学习语言,进过长时间的学习和总结,我将Python与c语言的一些特点总结成以下几点,不全面还望多多指正。1、因为C语言是编译型语言,python是解释型语言,所以python的执行速度没有C语言那么快。2、基本元素的区别,python中的基本元素相比于C语言大大减少,比较特殊......
  • 逍遥自在学C语言 | 位运算符~的高级用法
    前言在上一篇文章中,我们介绍了^运算符的高级用法,本篇文章,我们将介绍~运算符的一些高级用法。一、人物简介第一位闪亮登场,有请今后会一直教我们C语言的老师——自在。第二位上场的是和我们一起学习的小白程序猿——逍遥。二、相反数我们可以利用负数的补码性......
  • 表达式之运算符
    表达式必须是由值和运算符组合起来的var声明变量的关键字sum变量的名字=赋值号1+1+2表达式varsum=1+1+2;console.log(sum);varusername="你"+"好";//输出你好运算符"!"感叹号非,取反,求反"||"或,如果前面的值为true则不执行后面的,否则会执行......