gpt4 book ai didi

c - 这个自定义 toupper() 函数如何工作?

转载 作者:行者123 更新时间:2023-11-30 20:01:31 25 4
gpt4 key购买 nike

我见过以下使用自定义 toupper() 函数的程序。

#include <stdio.h> 
void my_toUpper(char* str, int index)
{
*(str + index) &= ~32;
}
int main()
{
char arr[] = "geeksquiz";
my_toUpper(arr, 0);
my_toUpper(arr, 5);
printf("%s", arr);
return 0;
}

这个功能具体是如何工作的?我无法理解其背后的逻辑。如果有人简单地解释一下就好了。

最佳答案

遵循ASCII table ,要将字母从小写转换为大写,需要从小写字母的 ASCII 值中减去 32

对于表示小写字母的 ASCII 值,减去 32,等于对 ~32 进行 AND 运算。这就是正在做的事情

 *(str + index) &= ~32;

它从str中获取第index成员的值,减去32(与~32按位与,清除特定位值)并将其存储回同一索引。

FWIW,这是“重置”特定位以获得实际减去 32 的结果的特殊情况。这里的“减法”基于小写字母 ASCII 值的特定位表示。正如评论中提到的,这不是一种通用的减法方式,因为这种“重置”逻辑不适用于任何减法值。

关于operators使用过,

  • &= 是按位 AND 赋值
  • ~ 按位非。

注意:此自定义函数缺少对 str 中存在的(输入)有效值的错误检查。你需要照顾好这一点。

关于c - 这个自定义 toupper() 函数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31100380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com