Может ли результат std::fetestexcept
вернуть несколько наборов битов или он всегда возвращает только один бит?
Он может вернуть int
с таким количеством битов, которое вы указали в аргументе std::fetestexcept
. Если вы, например, указали FE_ALL_EXCEPT
в качестве аргумента, он может вернуть int
с комбинацией...
FE_DIVBYZERO
FE_INEXACT
FE_INVALID
FE_OVERFLOW
FE_UNDERFLOW
... побитовое ИЛИ вместе. Чтобы проверить определенный бит, просто выполните побитовое И с константой, которую вы хотите проверить:
if (std::fetestexcept(FE_ALL_EXCEPT) & FE_OVERFLOW) {
std::cout << "the overflow bit was set\n";
}
Конечно, если вы предоставите константу только с одним набором битов, например FE_OVERFLOW
, она вернет только int
с нулевым или одним набором битов, и тогда вам не понадобится побитовое И после вызова:
if (std::fetestexcept(FE_OVERFLOW) {
std::cout << "the overflow bit was set\n";
}