jjzjj

c++ - `intmax_t` 在具有 64 位 `long int` 和 `long long int` 的平台上应该是什么?

在C++标准18.4中它指定:typedef'signedintegertype'intmax_t;根据具有64位longint和64位longlongint的平台标准,这个“有符号整数类型”应该是?请注意,longint和longlongint是不同的基本类型。C++标准说:Theheaderdefinesallfunctions,types,andmacrosthesameas7.18intheCstandard.在C标准(N1548)的7.18中,它说:Thefollowingtypedesignatesasignedintegertypecapableofrepresentin

c++ - intmax 有效除法

我有一个uint32_t类型的整数,我想将它除以uint32_t的最大值,并获得float的结果(在0..1范围内)。当然,我可以做到以下几点:floatresult=static_cast(static_cast(value)/static_cast(std::numeric_limits::max()))然而,这是相当多的转换过程,而且这个部门本身可能很昂贵。有没有一种方法可以更快地实现上述操作,而无需除法和多余的类型转换?或者也许我不应该担心,因为现代编译器已经能够生成高效的代码?编辑:除以MAX+1,有效地在[0..1)范围内给我一个float也可以。更多上下文:我在时间关键的

c++ - 为什么在 g++ std::intmax_t 中不是 __int128_t?

我的问题很简单:因为std::intmax_t根据cppreference定义为maximumwidthintegertype,为什么不对应GCC中的__int128_t? 最佳答案 我认为这违反了C和C++标准——或者gcc不考虑__int128_t是一个整数类型。C标准(1999版和2011版)不需要intmax_t成为标准类型之一;它必须是“能够表示任何有符号整数类型的任何值的有符号整数类型”。特别是,它可以是一个扩展整数类型——如果有一个128位扩展整数类型,那么intmax_t必须至少为128位宽。C标准甚至建议使用实现定

c++ - 为什么不是 abs constexpr?

在,从C++11开始,有thefollowingtwo重载:std::intmax_tabs(std::intmax_tn);std::intmax_timaxabs(std::intmax_tn);为什么不是这两个函数constexpr? 最佳答案 我不能很好地解释为什么abs不能是constexpr并且显然gcc也不能。当我在这个程序中使用gcc4.9.2时:#include#include#includeconstexprintmax_tabs3=std::abs(3);constexprintmax_tabsneg3=std

c++ - 为什么不是 abs constexpr?

在,从C++11开始,有thefollowingtwo重载:std::intmax_tabs(std::intmax_tn);std::intmax_timaxabs(std::intmax_tn);为什么不是这两个函数constexpr? 最佳答案 我不能很好地解释为什么abs不能是constexpr并且显然gcc也不能。当我在这个程序中使用gcc4.9.2时:#include#include#includeconstexprintmax_tabs3=std::abs(3);constexprintmax_tabsneg3=std