#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 != '\0') { r++; } while (l < r - 1) { char tmp = *l; *l = *(r - 1); *(r - 1) = tmp; l++; r--; } l = str; r = str; while (*r != '\0') { while (*r != 32 && *r != '\0') { r++; } char *p = r; while (l < r - 1) { char tmp = *l; *l = *(r - 1); *(r - 1) = tmp; l++; r--; } if (*p == '\0') { return str; } l = p + 1; r = p + 1; } return str; } int main(){ printf("%u\n", reverse_bit(25)); /*int a = 0; int b = 0; printf("请输入a,b:>\n"); 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\n", func(arr,length));*/ char ch[] = "student a am i"; printf("%s\n", fanzhuan(ch)); system("pause"); return 0; }
指针和运算符
猜你喜欢
转载自www.cnblogs.com/duy666/p/10222067.html
今日推荐
周排行