繁体   English   中英

为什么像 isdigit() 这样的函数会返回一个随机的非零值?

[英]Why do functions like isdigit() return a random non-zero value?

在 The C Programming Language 一书的第二版中,据说像 isdigit 这样的函数可以返回任何非零值来表示 true。 为什么像 isdigit 这样的函数会为 true 返回一个随机的非零值,而不是像 1 这样的标准化值(就像逻辑表达式一样)? 另外,在我的测试中,isdigit 函数的结果总是 2048 为真。 这是完全随机的还是与某些东西相关联,或者这个 2048 值对每个人来说都是一样的?

我使用的编译器:GCC 12.1.0

isdigit和相关例程(如isalpha )的常见实现是使用一个按字符值索引的数组,其中表的每个元素都是属性的一组位标志。 如果字符是数字,则设置一位,如果字符是字母,则设置一位,如果是空白字符,则设置一位,依此类推。

然后<ctype.h>函数可以主要实现为table[x] & mask ,其中掩码为测试选择所需的位。

如果字符不在测试集中,则结果为零,如果在测试集中,则结果为非零。 因为非零值是被测试的标志,所以它不是一,除非适用的标志碰巧使用位零,值为一。 例如,如果用于指示数字的位是位 10,值为 1024,则isdigit将始终返回零或 1024。

这足以满足字符分类功能的目的。 添加一个他们只返回一个或零的要求将需要一个额外的步骤,所以这将是浪费的,因此这个要求没有添加到规范中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM