C語言程式-位操作
阿新 • • 發佈:2019-02-01
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;
}