偶数位(熟悉二进制)

Posted Code-wangg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了偶数位(熟悉二进制)相关的知识,希望对你有一定的参考价值。

  几天没写了,今天写一个简单的小题

 

   这道题乍一看,有点没有头绪,但是仔细考虑,也不是毫无头绪.

  思路1:

  只要会十进制和二进制之间的转换,将十进制转二进制,然后存放到数组里面,接着进行偶数位的操作,最后在转十进制就好;

但是,有没有更好的方法呢?

思路2:

计算机里面数字的存储本来就是二进制,为何要复杂的转来转去?只要想办法对二进制直接操作就好;

这里我们可以考虑 >> 按位右移这一操作符,只要从第0位开始,每次按位右移2位,这样就可以在对每一位的0或1操作就好

那么现在考虑的就是,进行操作后,数值和以前变化关系,只要对二进制熟悉,进很容易知道,第几位的数字,大小就是2的几次方,假设是第n位,表示的就是 2 ^ n;

那么,改之后的数字就比原数值小 2 ^ n ;只要减去这一个数值就好;

现在还有一个问题就是如何确定这一位是0 还是 1 ; 如果你记得 & (按位与)这个操作符就很简单;

& 按位与 ,同一得一; 1 & 1 = 1 ; 0 & 1 = 0 ; 0 & 0 = 0 ;(这里都是等于,不是赋值,只是为了方便);

#include<stdio.h>
#include<math.h>

int main() 
 
    int n = 0;
    int i = 0;
    scanf("%d",&n);
    int num = n;
    for (i = 0 ; i < 32 ; i += 2)
    
        if (1 == ((n >> i) & 1))
        
            num -= pow(2 , i);
        
    
    printf("%d",num);
    return 0; 

  简简单单,答案就出来了;

  只需要简简单单几行,不想第一种方法,翻来覆去;

  

以上是关于偶数位(熟悉二进制)的主要内容,如果未能解决你的问题,请参考以下文章

写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换

写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换

写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换

宏实现奇数偶数位交换及offsetof

获取一个数二进制序列中所有的偶数位和奇数位

基础编程题之奇数位(偶数位)都是奇数(偶数)