1. 程式人生 > >C語言程式-位操作

C語言程式-位操作

1.unsigned int reverse_bit(unsigned int value);
這個函式的返回值value的二進位制位模式從左到右翻轉後的值。

如:
在32位機器上25這個值包含下列各位:
00000000000000000000000000011001
翻轉後:(2550136832)
10011000000000000000000000000000
程式結果返回:
2550136832

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

unsigned int reverse_bit(unsigned int value)
{
    int i = 0
; unsigned int Ret = 0; for (i = 0; i < 32; i++) { if (!(value >> i)) { break; } else if ( (value >> i) & 0x01) { Ret += pow(2, (31 - i)); } } return Ret; } int main() { unsigned int data = 0
; unsigned int Ret = 0; printf("請輸入一個數:\n"); scanf_s("%u", &data); printf("翻轉後的數為 :%u\n" ,reverse_bit(data)); system("pause"); return 0; }

2.不使用(a+b)/2這種方式,求兩個數的平均值。

#include<stdio.h>
#include <windows.h>

int main()
{
    double a = 0;
    double b = 0;
    double
c = 0; printf("請輸入兩個數: "); scanf_s("%lf %lf", &a, &b); c = a + ((a - b) / 2.0); printf("平均數為%lf\n",c); system("pause"); return 0; }

3.程式設計實現:
一組資料中只有一個數字出現了一次。其他所有數字都是成對出現的。
請找出這個數字。(使用位運算)

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

int main()
{
    int arr[9] = { 0 };
    int i =  0;
    int j =  0;
    int a = 0;
    printf("請輸入4對相同的數字和一個單獨不同的數字\n");
    for (i = 0; i < 9; i++)
    {
        scanf_s("%d", &arr[i]);
    }
    for (i = 0; i < 9; i++)
    {
        a ^= arr[i];
    }
    printf("單獨的數字是:%d\n", a);

    system("pause");
    return 0;
}


4.有一個字元陣列的內容為:”student a am i”,請你將陣列的內容改為”i am a student”.
要求:
不能使用庫函式。只能開闢有限個空間(空間個數和字串的長度無關)。

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

int main()
{
    int i = 0;
    int j = 0;
    int R = 13;
    int L = 0;
    int k = 14;
    char arr[14] = { "student a am i" };
    char arr2[14] = { 0 };

    for (i = 13; i >= 0; i--)
    {
        if (arr[i - 1] == ' ' || i == 0)
        {
            for (R = i; R < k;)
            {
                arr2[L++] = arr[R++];
            }
            k = i - 1;
            arr2[L++] = ' ';
            i--;
        }
    }
    for(i = 0; i < 14 ;i++)
    {
        printf("%c", arr2[i]);
    }
    printf("\n");

    system("pause");
    return 0;
}