14
|
R.. GitHub STOP HELPING ICE · 技术社区 · 14 年前 |
![]() |
1
10
归功于Hallvard B.Furuseth的imax_bits()函数,比如他在回复a时发布的宏 question on comp.lang.c
例如
在另一个comp.lang.c讨论中,名为blargg的用户对宏的工作方式进行了细分:
请注意,宏只适用于2^n-1值(即二进制中的所有1),正如任何max值所预期的那样。另外请注意,虽然很容易获得无符号整数类型的最大值的编译时常量(
|
![]() |
2
5
比较宏的来源
|
![]() |
3
2
第一种方法,如果你知道你的标准类型(所以你的类型不是
如果没有,对于无符号类型,这在概念上相对容易。你最喜欢的类型
这不管用
对于签名类型,这更为复杂。对于宽度至少与
编辑: 为了说明这一点,我给你一些摘录 可以使此方法(对于无符号类型)不生成 中的大型表达式 P99 我有类似的东西
其中magic常量是用一个if序列定义的, 开始。在那里,重要的是不要暴露太大的常量 对于无法处理它们的编译器。
|
![]() |
4
0
是的,因为出于所有实际目的,可能的宽度数量是有限的:
|
![]() |
5
0
您可以在运行时使用一个简单的循环来计算它,定义良好,不存在ub的危险:
最简单的方法是检查单元测试 有 他们,对吧?)该值与当前的int宽度定义相同。 如果您真的需要在编译时计算它,我将使用给定的一个if-elif级联,或者测试uint-max或者您的目标系统。 你需要它做什么?也许雅尼? |
![]() |
6
0
一般的观察是,如果在计算中依赖于数据类型的宽度,则应使用中定义的显式宽度数据类型。
试图计算标准类型中的字节数是在提出这样一个问题:如果发生溢出,“可移植”代码会做什么。 |
![]() |
7
-1
通常,尺寸为
你可以看看
|
![]() |
Abeezuo · Ruby正则表达式,用于精确包含x个整数的字符串 2 年前 |
![]() |
manOnTheMoon · 对于循环-我只能输入1个整数 2 年前 |
![]() |
grative · 我怎样才能掩盖Swift中的第一个和最后一个角色? 2 年前 |
![]() |
Kaiger Chainer · 将一个元素从list转换为int 2 年前 |
![]() |
MOmo · C++中字符串的最后一个字符使用n后退()和铸造 2 年前 |
![]() |
arka · C语言中奇怪的联合行为 3 年前 |