题1:编写一个程序,输出一个char类型数据的镜像。(既假如
一个char类型数的二进制码是01100001那输出应为10000110)。
#include
#include
char Reverse(char *src)
{
char *start;
char *end;
start = src;
//printf("%d\n",start);
end = src + sizeof(char)(strlen(src)-1);
char p;
while(start<end)
{
p =*start;
*start = *end;
*end = p;
start=start+sizeof(char);
end = end - sizeof(char);
}
return src;
}
int main()
{
char src[] = "1001101010";
char *result = Reverse(src);
int j = 0;
printf("%s",src);
scanf("%d",&j);
return 0;
}
不知道满意否。
这个不是同一个问题!不是这么处理的!
/**
#include
#include
#include
void
bitprt(unsigned char u)
{
unsigned char m;
for (m = 0x80; m; m >>= 1) {
putchar('0' + !!(m & u));
}
putchar('\n');
}
unsigned char
bitrev(unsigned char u)
{
u = (u & 0x55) << 1 | (u & 0xAA) >> 1;
u = (u & 0x33) << 2 | (u & 0xCC) >> 2;
u = (u & 0x0F) << 4 | (u & 0xF0) >> 4;
return u;
}
int
main(int argc, char *argv[])
{
unsigned char u;
u = 0x61;
bitprt(u);
u = bitrev(u);
bitprt(u);
u = bitrev(u);
bitprt(u);
putchar('\n');
srand(time(NULL));
u = rand();
bitprt(u);
u = bitrev(u);
bitprt(u);
u = bitrev(u);
bitprt(u);
putchar('\n');
u = rand();
bitprt(u);
u = bitrev(u);
bitprt(u);
u = bitrev(u);
bitprt(u);
putchar('\n');
return 0;
}
/* output
01100001
10000110
01100001
00011011
11011000
00011011
11110001
10001111
11110001
*/
#include<stdio.h>
unsigned char reverse(unsigned char c)
{
c = (c & 0x55) << 1 | (c & 0xAA) >> 1; //按两位翻转一次
c = (c & 0x33) << 2 | (c & 0xCC) >> 2; //按四位翻转一次
c = (c & 0x0F) << 4 | (c & 0xF0) >> 4; //按八位翻转一次
return c;
}
int main()
{
unsigned char c = 0xac; // 二进制为 10101100
printf(" %X -> %X \n",c,reverse(c)); // 镜像之后 00110101
//输出结果 : AC -> 35
return 0
}