C言語の演算子の練習

1.unsigned INT reverse_bit(unsigned int型の値) 、
関数値の戻り値は、左から右にビット反転パターンの値です。

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
unsigned int reverse_bit(unsigned int value)
{
    int ret = 0;
    int tmp = 0;
    for (int i=0; i < 32; i++)
    {
        ret = ret << 1;//左移一位,保存前一位
        tmp = value & 1;//取出最后一位
        value = value >> 1;//值右移, 取下一位
        ret = ret | tmp;//最后一位赋给ret
     }
	   return ret;
}
int main()
{
    int input = 0;
    printf("请输入一个数字:\n");
    scanf("%d", &input);
    printf("%u\n",reverse_bit(input));
    system("pause");
    return 0;
}


2.このように2つの数の平均値を(+ bの)/ 2を使用しません。

#include<stdio.h>
#include<stdlib.h>
int Avg_Num(int a, int  b)
{
	int num = 0;
	num = (b - a) / 2 + a;
	return num;
}
int main()
{
	int a, b;
	printf("请输入两个数字:\n");
	scanf_s("%d %d", &a, &b);
	printf("%d\n",Avg_Num(a, b));
	system("pause");
	return 0;
}

これは、2オペレータによる右シフトに相当します

int Avg_Num(int a, int  b)
{
	return ((a&b) + ((a^b) >> 1));
}

3.プログラミング:
数のデータのセットが一度だけ表示されます。
他のすべての数字はペアです。
この番号を探してください。(使用ビット動作)
任意の数または任意の数の0排他的
XOR 0の同数

int Seek_num(int arr[],int len)
{
	int ret = 0;
	for (int i = 0; i < len; i++)
	{
		ret = ret^arr[i];
	}
	return ret;
}
int main()
{
	int arr[] = { 2, 2, 3, 4, 5, 7, 3, 5, 4 };
	int len = 0;
	len = sizeof(arr) / sizeof(arr[0]);
	printf("%d\n",Seek_num(arr,len));
	system("pause");
	return 0;
}

4.コンテンツの文字列があります:「学生ですが、私は」、
あなたが読んで、配列の内容は、「私は学生です」。
要件:
あなたはライブラリ関数を使用することはできません。
のみ(関わらず、スペースや文字列の長さの数の)オープンスペースの限られた数。
最初に「私は学生です」を取得する逆の順序で再び各スペースで区切られた文字列の後に、「私はtneduts MA」を取得、最初の分析は逆の順序で2回使用されなければならない問題を参照してください。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void reverse(char* start, char* end)
{
	while (start < end)
	{
		char tmp = *start;
		*start = *end;
		*end = tmp;
		start++;
		end--;
	} 
}

void str_reverse(char* str)
{	
	int len = strlen(str);
	reverse(str, str + len - 1);  //全部逆置
	while (*str != '\0')
	{
		char* pos = str;
		while ((*str != ' ') && (*str != '\0'))
		{
			str++;
		}
		reverse(pos, str - 1);    //每个单词的逆置
		if (*str != '\0')
		{
			str++;
		}
	}
}

int main()
{
	char str[] = "student a am i";
	printf("原字符串为:%s\n", str);
	str_reverse(str);
	printf("翻转后的字符串为:%s\n", str);

	system("pause");
	return 0;
}

公開された60元の記事 ウォン称賛23 ビュー3334

おすすめ

転載: blog.csdn.net/weixin_44945537/article/details/99569337
おすすめ