zoukankan      html  css  js  c++  java
  • C语言丨关于位运算的使用,只需掌握这4个简单示例!

    位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。


     

    1.输入一个float型数,以十六进制形式输出其32位机器数。

    #include<stdio.h>

    void main()

    {

    float a;

    int *p;

    printf("Input a float number: ");

    scanf("%f",&a);

    p=(int *)&a;

    printf("%X",*p);

    }

    2.从键盘输入一个二进制非负整数,屏幕上打印输出对应的十进制、八进制和十六进制数,要求输出的十六进制数中的英文字母为大写字母。

    #include<stdio.h>

    void main()

    {

    int ConvertBinaryToDecimal(long long n);//二进制转十进制的函数声明

    long long n;

    printf("Input a binary number: ");

    scanf("%lld",&n);//从键盘读取一个二进制数

    long long m;

    m=ConvertBinaryToDecimal(n);//调用函数

    printf("The number is %d in decimal. ",m);//输出十进制数

    printf("The number is %o in octal. ",m);//输出八进制数

    printf("The number is %X in hexadecimal. ",m);//输出十六进制数

    }

    int ConvertBinaryToDecimal(long long n)

    {

    int i=1,j,sum=0;//i表示位权,j表示每一次循环取出的尾数,sum表示转换的十进制数

    while(n!=0)

    {//循环条件为n不等于0

    j=n%10;

    sum+=j*i;

    n/=10;

    i*=2;

    }

    return sum;

    }

    3.定义函数void DecToBin(int a, char b[33]); 函数功能是将整数a转换为它对应的32位二进制机器数,将32位二进制机器数以字符串形式存于字符数组b(以''字符结束)不允许使用%2运算,只能利用位运算符(如:移位运算,与运算等)实现程序功能。

    #include<stdio.h>

    void main()

    {

    void DecToBin(int a,char b[33]);//函数声明

    int n,i=0;char b[33];

    scanf("%d",&n);//从键盘读取一个数

    DecToBin(n,b);//函数调用

    }

    void DecToBin(int a,char b[33])

    {

    int i;

    if(a>=0)//当a大于零时,直接通过位运算求其32位2进制机器数

    {

    for(i=0;i<32;i++)b[i]=0;

    b[32]='';

    i=0;

    while(a!=0)

    {

      b[i++]=a&1;

      a=a>>1;

    }

    }

    else//当a小于零时,先求其绝对值的机器数,再每位取反,再最后一位加1

    {

    for(i=0;i<32;i++)b[i]=1;

    b[32]='';

    a=-a;

    i=0;

    while(a!=0)

    {//每位取反

      if((a&1)==0)

      b[i++]=1;

      else

      b[i++]=0;

      a=a>>1;

    }

    b[0]+=1;//最后一位加1

    i=0;

    while(b[i]==2)//判断是否需要进位

    {

      b[i]=0;

      b[++i]+=1;

    }

    }

    for(i=31;i>=0;i--)

    printf("%d",b[i]);//输出

    printf(" ");

    }

    4.定义函数unsigned mod(unsigned a, unsigned b, unsigned c); 功能是计算并返回a*b%c的结果。要求考试a, b, c的范围是大于0且小于 231,程序不能使用64位整型(如:long long类型或__int64)求解。

    #include<stdio.h>

    void main()

    {

    unsigned mod(unsigned a, unsigned b, unsigned c);//函数声明

    unsigned a,b,c;

    printf("Input unsigned integer numbers a, b, c: ");

    scanf("%u%u%u",&a,&b,&c);//输入

    printf("%u*%u%%%u=%u ",a,b,c,mod(a,b,c));//输出

    }

    unsigned mod(unsigned a, unsigned b, unsigned c)

    {

    int i;

    int bin[32]={0};

    i=0;

    while(b!=0)

    {//求b的32为二进制数存入数组bin中

    bin[i++]=b&1;

    b=b>>1;

    }

    unsigned result=a*bin[31];//初始化result的值

    for(i=31;i>0;i--)

    result=(result<<1)%c+a*bin[i-1];//迭代法求result的值

    result=result%c;

    return result;//返回result

    }

    以上就是关于对关于C语言位运算的简单示例的详细介绍。欢迎大家对关于C语言位运算的简单示例内容提出宝贵意见。


     

    如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!

    C语言C++学习企鹅圈子】,分享(源码、项目实战视频、项目笔记,基础入门教程)

    欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

    编程学习书籍:


     

    编程学习视频:

     
  • 相关阅读:
    002. 在HTML页面嵌入循环代码
    001. 为input type=text 时设置默认值
    PHP包名解释
    003. vs2010发布、打包安装程序(转)
    SQL server 2008 Express Edition实现自动备份和自动删除备份
    解决phpMyAdmin中缺少mysqli扩展的错误
    IIS6下PHP环境的资源未找到(404)问题
    解决远程桌面连接过去后是蓝色屏幕问题
    解决tomcat一闪而过问题
    解决访问远程共享时发生 请检查名称的拼写. 否则, 网络可能有问题 故障
  • 原文地址:https://www.cnblogs.com/mu-ge/p/14201407.html
Copyright © 2011-2022 走看看