码迷,mamicode.com
首页 > 其他好文 > 详细

位操作

时间:2016-07-04 12:10:06      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:位操作

  • 输入n个数,请将其中的偶数的二进制反转。
    eg:输入1 6 5
    其中6是偶数,二进制表示为110,反转后为011,代表3,所以最终输出1 3 5.

  • #define _CRT_SECURE_NO_WARNINGS 1
    #include<iostream>
    using namespace std;
    #include<assert.h>
    void Reverse(int *&array, int index,int size)
    {
    	assert(array);
    	assert(index < size);
    	assert(array[index] % 2 == 0);
    	int data = array[index];
    	int right = 0;
        int left = 31;
    	while (left >= 0)
    	{
    		int singal = (array[index] >> left) & 1;
    		if (singal == 1)
    		{
    			break;
    		}
    		left--;
    	}
    	while (left > right)
    	{
    		int left1 = (data>>left) & 1;
    		int right1 = (data>>right) & 1;
    		if (left1==1)
    		    array[index] = array[index] |(1<< right);
    		else
    			array[index] = array[index] & (~(1<< right));
    		if (right1 == 1)
    			array[index] = array[index] | (1 << left);
    		else
    			array[index] = array[index] & (~(1 << left));
    		left--;
    		right++;
    	}
    
    }
    void change(int *&array, int size)
    {
    	assert(array);
    	for (int i = 0; i < size; i++)
    	{
    		if (array[i] % 2 == 0)
    			Reverse(array, i, size);
    	}
    }
    int main()
    {
    	int size = 0;
    	cin >> size;
    	int *array = new int[size];
    	for (int i = 0; i < size; i++)
    	{
    		cin >> array[i];
    	}
    	change(array, size);
    	for (int i = 0; i < size; i++)
    	{
    		cout << array[i] << " ";
    	}
    	cout << endl;
    	system("pause");
    	return 0;
    }

本文出自 “学习记录” 博客,转载请与作者联系!

位操作

标签:位操作

原文地址:http://10794428.blog.51cto.com/10784428/1795452

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!