澄叔 发表于 2022-12-1 10:50

C语言求助+讨论

【问题描述】定义函数char change(char c, int n),其对字符c的第n位(n为1~8)进行转换,即c的第n位为0时,转换为1;第n位为1时,转换为0。
【输入形式】字符和第几位。
【输出形式】转换后的字符。
【样例输入】A         5
【样例输出】a

https://static.52pojie.cn/static/image/hrline/4.gif
没有金币了,顺便问问怎么获取(好久没来论坛了)

tfrist 发表于 2022-12-1 11:55

本帖最后由 tfrist 于 2022-12-1 12:11 编辑

抛砖引玉一下! 手头没有C编译器,没办法编译测试。 根据想法写的一个伪代码。n的取值应该为 0-7.

char change(char c, int n)
{
if (c & (1<<n)){
      c &= 0xff^(1<<n);
}
else{
   c |= 0xff&(1<<n);
   }

return c;
}

KongKong20 发表于 2022-12-1 12:03

char change(char c, int n)
{
        unsigned char r = 0;

        unsigned char index = 1 << n;
        unsigned char flag = c & index;
        if (flag)
                r = c & 0xff ^ index;
        else
                r = c | index;

        return r;
}

banchengkemeng 发表于 2022-12-1 12:45

char change(char c, int n) {
        return c^(1<<n);
}

tfrist 发表于 2022-12-1 12:52

banchengkemeng 发表于 2022-12-1 12:45
char change(char c, int n) {
        return c^(1

短小精悍!

banchengkemeng 发表于 2022-12-1 12:55

tfrist 发表于 2022-12-1 12:52
短小精悍!

异或1是取反,异或0是不变,所以直接异或一个"目标位置是1,其他位置都是0"的数就好了

iteamo 发表于 2022-12-1 16:41

banchengkemeng 发表于 2022-12-1 12:45
char change(char c, int n) {
        return c^(1

学习了,另辟蹊径~

澄叔 发表于 2022-12-1 16:44

KongKong20 发表于 2022-12-1 12:03
char change(char c, int n)
{
        unsigned char r = 0;


运行很成功,就是看不太懂大体思路,麻烦老哥解释下哈

澄叔 发表于 2022-12-1 16:56

tfrist 发表于 2022-12-1 11:55
抛砖引玉一下! 手头没有C编译器,没办法编译测试。 根据想法写的一个伪代码。n的取值应该为 0-7.

char ...

老哥的答案也是可以的
修改了部分
char change(char c, int n)
{
    unsigned char r = 0;   //使用的dev,别的编译器应该可以通过的
    if (c & (1<<n)){
      r=c & 0xff^(1<<n);
}
else{
   r=c |= 0xff&(1<<n);
   }

return c;
}

澄叔 发表于 2022-12-1 16:58

banchengkemeng 发表于 2022-12-1 12:45
char change(char c, int n) {
        return c^(1

不得不说这个666
“短小精悍”
想听友友的思路呢
页: [1] 2
查看完整版本: C语言求助+讨论