zoukankan      html  css  js  c++  java
  • 指针和运算符

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    #include <math.h>
    
    //1.编写函数:
    //unsigned int reverse_bit(unsigned int value);
    //这个函数的返回值value的二进制位模式从左到右翻转后的值。
    //
    //如:
    //在32位机器上25这个值包含下列各位:
    //00000000000000000000000000011001
    //翻转后:(2550136832)
    //10011000000000000000000000000000
    //程序结果返回:
    //2550136832
    
    unsigned int reverse_bit(unsigned int value)
    {
        //将提出的第一位左移31位,第二位左移30位……依次类推,将左移后的结果进行按位或运算即可得到最终结果。
        int i = 0;
        int ret = 0;
        for (i = 0; i < 32; i++)
        {
            if (value >> i & 1)
            {
                ret |= (value >> i & 1) << (31 - i);
            }
        }
        return ret;
    }
    
    
    unsigned int reverse_bit1(unsigned int value)
    {
        /*首先将整数的每一位提取出来,乘以该位的权值,在依次相加即可得到结果。
        例如第一次提出的1的权值为2^31,相乘的结果即为2^32,接下来每提出一次0或1,
        其权值在原来的基础上除以2。而要将求第i位的值,只需将这个整数的二进制序列向右移i - 1位,
        再和1进行按位与操作,即(value >> i - 1) & 1*/
        int i = 0;
        int sum = 0;
        int b = 0;
        for (i = 0; i < 32; i++)
        {
            b = ((value >> i) & 1)*pow(2, 31 - i);
            sum += b;
        }
        return sum;
    }
    //2.不使用(a + b) / 2这种方式,求两个数的平均值。
    //
    double Average(int a, int b){
        return (double)(b - a) / 2 + a;
    }
    //3.编程实现:
    //一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。
    //请找出这个数字。(使用位运算)
    int func(int arr[], int length){
        int i = 0;
        haha:while(i<length){
            int j = 0;
            while(j<length){
                if ((arr[i] & arr[j]) == arr[i] &&i != j){
                    i++;
                    goto haha;
                }
                j++;
            }
            return arr[i];
        }
        return -1;
    }
    //4.
    //有一个字符数组的内容为:"student a am i",
    //            请你将数组的内容改为"i am a student".
    //            要求:
    //            不能使用库函数。
    //            只能开辟有限个空间(空间个数和字符串的长度无关)。
    //
    //            student a am i
    //            i ma a tneduts
    //            i am a student
    //逆序
    char * fanzhuan(char *str)
    {
        char *l = str;
        char *r = str;
    
        while (*r != '')
        {
            r++;
        }
        while (l < r - 1)
        {
            char tmp = *l;
            *l = *(r - 1);
            *(r - 1) = tmp;
            l++;
            r--;
        }
        l = str;
        r = str;
        while (*r != '')
        {
            while (*r != 32 && *r != '')
            {
                r++;
            }
            char *p = r;
            while (l < r - 1)
            {
                char tmp = *l;
                *l = *(r - 1);
                *(r - 1) = tmp;
                l++;
                r--;
            }
            if (*p == '')
            {
                return str;
            }
            l = p + 1;
            r = p + 1;
        }
        return str;
    }
    
    
    
    int main(){
        
        printf("%u
    ", reverse_bit(25));
    
    
        /*int a = 0;
        int b = 0;
        printf("请输入a,b:>
    ");
        scanf("%d %d",&a,&b);
        printf("%f", Average(a,b));*/
    
    
        /*int arr[] = { 1, 2, 3, 4, 5, 6, 6, 4, 2, 3, 1 };
        int length = sizeof(arr) / sizeof(arr[0]);
        printf("%d
    ", func(arr,length));*/
    
        
        char ch[] = "student a am i";
        printf("%s
    ", fanzhuan(ch));
    
        system("pause");
        return 0;
    }
  • 相关阅读:
    14组作品的优点与建议
    人月神话读后感1
    [置顶] acm入门
    POJ 3041 Asteroids 【匈牙利算法最小点覆盖】
    acm入门
    【转】acm入门
    POJ 1469 COURSES【匈牙利算法入门 二分图的最大匹配 模板题】
    二分图最大匹配总结【转自kb神】
    POJ 3041 Asteroids (匈牙利算法最小点覆盖)
    POJ 1258 AgriNet (最小生成树入门题目)
  • 原文地址:https://www.cnblogs.com/du001011/p/10222067.html
Copyright © 2011-2022 走看看