【C语言】--从一个整数a中把从右端开始的4-7位取出来

目录

题目

问题分析

右移操作符

左移操作符

方法一

方法二 

运行结果


题目

用c语言从一个整数a中把从右端开始的4-7位取出来  

问题分析

右移操作符

        右移操作符是一种位运算符,用于将二进制数向右移动指定的位数。它通常用符号" >> "表示。右移一位相当于将二进制数除以2,右移n位相当于将二进制数除以2的n次方。

        例如,二进制数1101右移两位,结果为0011,相当于十进制数13除以4。

        在计算机程序中,右移操作符用于对数据进行位处理,例如提取某些位信息,对数据进行分组,加密等。

左移操作符

        左移操作符是一种位运算操作符,通常用于将二进制数向左移动指定的位数。在大部分编程语言中,左移操作符用符号“<<”表示。

        例如,将二进制数1010(十进制数为十)左移两个位,则得到结果为0100(十进制数为四)。

        在计算机中,左移操作符可以用于加速计算,因为左移一位相当于乘以2的1次方,左移n位相当于乘以2的n次方。因此,左移操作符常用于优化代码的性能。

方法一

 可以使用位运算和移位操作来取出这些位,具体实现如下:

#include <stdio.h>

int main() {
    int a = 0b1010111101010101; // 假设a为二进制数1010111101010101
    int b = (a >> 3) & 0b1111; // 取右端第7~4位,即把a右移3位再与0b1111(二进制数1111)按位与
    printf("%d\n", b); // 输出结果为1010,即十进制数10
    return 0;
}

        其中,>>表示右移操作,把二进制数向右移动指定的位数,即把右端的位数舍去;&表示按位与运算,两个二进制数按位取与,即对应位置上的数都为1时结果为1,否则为0。在此代码中,首先将a向右移动3位,即保留右端第7~4位,然后再与0b1111按位与,即把左侧的位数都清零,最终得到的结果就是从右端开始的4-7位。 

方法二 

(1)先使a右移4位。
(2)设置一个低4位全为1,其余全为0的数。可用~(~0<<4)
(3)将上面二者进行&运算。

#include <stdio.h>
int main()
{
	unsigned a, b, c, d;
	scanf("%o", &a);//输入一个二进制数
	b = a >> 3;  //(1)先使a右移3位。
	c = ~(~0 << 4);  //(2)设置一个低4位全为1, 其余全为0的数。
	d = b & c;          //(3)将上面二者进行& 运算
	printf("%o\n%o\n", a, d);
}

运行结果

 

最近更新

  1. TCP协议是安全的吗?

    2023-12-23 23:14:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-23 23:14:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-23 23:14:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-23 23:14:01       20 阅读

热门阅读

  1. Oracle 11g体系结构整理-明日科技编著

    2023-12-23 23:14:01       35 阅读
  2. ffmpeg 打印视频帧的数量

    2023-12-23 23:14:01       44 阅读
  3. ElasticSearch DSL Bool查询

    2023-12-23 23:14:01       43 阅读
  4. MyBatis的延迟加载(懒加载)

    2023-12-23 23:14:01       45 阅读
  5. SpringBoot整合Mybatis遇到的常见问题及解决方案

    2023-12-23 23:14:01       44 阅读
  6. 点云分割--基于PatchWork++的地面点云分割

    2023-12-23 23:14:01       46 阅读
  7. vue2与vue3的区别

    2023-12-23 23:14:01       33 阅读