【问题标题】:Is it a way to define maximum of an unsigned char to a specific value n C?是否可以将 unsigned char 的最大值定义为特定值 n C?
【发布时间】:2015-12-24 07:53:41
【问题描述】:

我想将程序中的最大字符定义为 5。这是一种无需每次控制 5 即可实现此目的的方法。

【问题讨论】:

  • 所以您想将分配给intchar 的内存限制为3 位?
  • char 类型不能改变,如果你想clamp一些值到一个特定的范围你必须自己做。
  • @Arc676 是的,在某种程度上
  • 不,你不能。数字表示使用位,并且至少在 C 中,您只能限制给定变量的位数(请参阅结构中的位字段),因此对于给定变量,您可以获得的最大值始终为 2^n-1 n.
  • 参见here 以限制structs 中变量的可用内存

标签: c unsigned-integer unsigned-char


【解决方案1】:

不,你不能。数字的表示使用位,并且至少在 C 中,您只能限制给定变量的位数(参见结构中的位字段),因此对于给定变量,您可以获得的最大值始终为 2^n-1 n.这样:

struct small {
    int limited:5; // 5 bits variable
};

int main() {
    struct small s;
    for (s.limited=0; ; s.limited++) {
        printf("%d\n",s.limited);
    }
}

当然,如果需要,您可以将类型更改为unsigned

如果你想控制给定变量的边界,你需要定义函数或宏来做到这一点,例如:

#define SET(x,v) { if (v>5) abort(); (x) = (v); }
...
int a;
SET(a,4);
...
SET(a,45);

还有其他可能性,例如使用不透明类型来确保强制执行错误值几乎是不可能的,但稍微困难一些。

【讨论】:

    猜你喜欢
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2019-04-16
    相关资源
    最近更新 更多