首页 > 其他 > 详细

位运算

时间:2020-05-01 19:12:08      阅读:63      评论:0      收藏:0      [点我收藏+]

 

将整型转化为二进制(此部分为转载):

函数:itoa(integer to array)
功能:把一整数转换为字符串
用法:char *itoa(int value, char *string, int radix); 将int整型数转化为一个字符串,并将值保存在数组string中。
value: 待转化的整数。
radix:是基数的意思,即先将value转化为radix进制的数,范围介于2-36,比如10表示10进制,16表示16进制。
* string:保存转换后得到的字符串。
返回值:
char *:指向生成的字符串, 同*string。
头文件:"stdlib.h"

方法一:itoa函数
itoa函数将数值转换为字符串,通过规定转换进制实现。
 
#include<stdio.h>
#include<stdlib.h>
//注意必须调用stdlib.h函数库
int main(void)
{
    while(1)
    {
        int a;
        printf("请输入一个十进制数:  ");
        scanf("%d",&a);
        char str[30];
        itoa(a,str,2);//2即是代表转换为2进制
        printf("转换成二进制数是: %s\n\n",str);
    }
    return 0;
}

 

#include<stdio.h>
int main(void){
    int a,b,k,i;
    int remainder[30];
    //定义了一个remainder数组,用来收集短除法除得的余数,栈倒序输出。
    a=1000;
    k=0;
    while(a!=0){
        b=a/2;
        k++;
        remainder[k]=a-b*2;
        a=a/2;
    };
    for (i=k;i>=1;i--){
        printf("%d",remainder[i]);
    } 

    return 0;
} 

转载结束。

 

按位与运算;&;0&0 = 0; 0&1 = 0 ; 1&1 = 1;

与 0x00ff 按位与运算,可以实现高字节清零,低字节不变。(short int 类型)

#include<stdio.h>

int main()
{
    const unsigned int a = 0x00ff;
    unsigned int x;
    scanf("%x",&x);
    x = x&a;
    printf("%x",x);
    return 0;
}

按位或 |:0|0 =0 ; 0|1 =1; 1|1 = 1;

与0x00ff按位或运算,可以实现低字节置位为1, 高字节不变,(short int 类型)

 

#include<stdio.h>
#include<stdlib.h>
int main()
{
    char str[100];// 用来存储二进制数。
    while(1)
    {
        short int x;
        scanf("%hx",&x); // h 修饰short。
        itoa(x,str,2);// 进制转化
        printf("what you enter: %s\n",str);

        short int con = 0x00ff;
        itoa(con,str,2);
        printf("0x00ff:%s\n",str);

        short int x_1 = x&con;
        itoa(x_1,str,2);
        printf("after &, x turn into: %s\n",str);

        short int x_2 = x|con;
        itoa(x_2,str,2);
        printf("after |, x turn into: %s\n",str);



    }

    return 0;
}

 按位或 ^: 二进制位上,相同为0, 不同为1;

 

#include<stdio.h>
#include<stdlib.h>
int main()
{
    while(1)
    {
        char str_1[20], str_2[20];
        short int x_1, x_2;
        scanf("%hx %hx",&x_1, &x_2);
        itoa(x_1, str_1, 2);
        printf("str_1: %016s\n",str_1);
        itoa(x_2, str_2, 2);
        printf("str_2: %016s\n", str_2);
        short int x = x_1^x_2;
        char str[20];
        itoa(x,str,2);
        printf("str_x: %016s\n",str);

    }

    return 0;
}

 注: 可以实现特定位的翻转。

左移<<n

去掉n 个二进制位 右边补上n个0

右移>>n

右边去掉n个二进制位,从左边补上n个二进制位。

对于无符号整数,左边一律补0, 右边一律补其符号位。

 

位运算

原文:https://www.cnblogs.com/zhang-zsq/p/12813955.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!