C标准库函数tolower源码为何是按位与而不是用加?

2020-02-06 10:07发布

箭头标注的地方为什么是c |= ('a' - 'A'); 而不是c += ('a' - 'A');
1.png (14.64 KB, 下载次数: 0) 下载附件 2016-1-1 17:04 上传

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
myxiaonia
1楼-- · 2020-02-07 08:25
lllaaa 发表于 2016-1-1 19:43
我猜是被人改动过。
如果有if判断大小写后,一般大家都会用+,但是这里用|也没错。因为大小写字母的hex有个 ...

这才是对的嘛
xizi
2楼-- · 2020-02-07 09:16
本帖最后由 xizi 于 2016-1-2 07:47 编辑
lllaaa 发表于 2016-1-1 19:43
我猜是被人改动过。
如果有if判断大小写后,一般大家都会用+,但是这里用|也没错。因为大小写字母的hex有个 ...


够简洁。
tolower 是 c |= 0x20;
那么 toupper 就是 c &= 0xdf;

不过if语句还是必要的,可以防止非字母ASCII输入。
armku
3楼-- · 2020-02-07 11:53
 精彩回答 2  元偷偷看……
伊犁鼠兔
4楼-- · 2020-02-07 12:12
dhbighead 发表于 2016-1-1 18:31
这是按位 或 吧。。。。。。。

嗯,是啊,确实写错了。
伊犁鼠兔
5楼-- · 2020-02-07 12:55
lllaaa 发表于 2016-1-1 19:43
我猜是被人改动过。
如果有if判断大小写后,一般大家都会用+,但是这里用|也没错。因为大小写字母的hex有个 ...

这个是PICC编译器的库函数源码,没被动过。相应的toupper也是类似的,通过&来运算。

2.png (14.28 KB, 下载次数: 0)

下载附件

2016-1-2 18:52 上传



伊犁鼠兔
6楼-- · 2020-02-07 16:05
xizi 发表于 2016-1-2 07:45
够简洁。
tolower 是 c |= 0x20;
那么 toupper 就是 c &= 0xdf;

嗯,确实是这样的。

一周热门 更多>