问题描述:
要求写一个函数,实现,输入一个char,然后经过一系列的位变换,输出一个newChar
具体变换要求如下:
char changeChar(void)
{
char ch = 0 ;
char newChar = 0;
char temp[7];//临时变量
printf("请输入ch:");
scanf("%d",&ch);
//itoa()函数是一个进制转换函数
printf("原来的ch的二进制:%s\n",itoa(ch,temp,2));
int str[7];
//将char中的每一位分离到str数组中
for(int j =0;j<=7;j++)
{
//化成二进制时,从右数是第几位就像右边移动几位(注意:下标从零开始)然后在与上1
str[j] = (ch>>j)&1; //移位操作符
}
int newStr[7];
//对原有的每一位进行按要求的具体操作
//根据要求不同,可以有不同的变换
newStr[0] = str[1];
newStr[1] = str[0];
newStr[2] = str[3];
newStr[3] = str[4];
newStr[4] = str[5];
newStr[5] = str[2];
newStr[6] = str[6];
newStr[7] = str[7];
//将新的位变换后的转变成char
for(int k = 0;k<=7;k++)
newChar = newChar +newStr[k]*pow(2,k);
printf("newChar的二进制表达:%s\n",itoa(newChar,temp,2));
printf("newChar:%d\n",newChar);
return newChar; //范围newChar
}
总结
要直接对char的每一位进行操作难以实现,因此,选用先将char中的每一位提取到一个数组中,然后在数组中进行变换,最后又转换成char便很容易实现了