ckd_sub
|
Definiert im Header
<stdckdint.h>
|
||
|
template
<
class
type1,
class
type2,
class
type3
>
bool ckd_sub ( type1 * result, type2 a, type3 b ) ; |
(seit C++26) | |
Berechnet die Subtraktion x - y und speichert das Ergebnis in * result . Die Subtraktion wird so durchgeführt, als ob beide Operanden in einem vorzeichenbehafteten Ganzzahltyp mit unendlichem Wertebereich dargestellt wären, und das Ergebnis dann von diesem Ganzzahltyp in type1 konvertiert wurde. Wenn der zugewiesene Wert für * result das mathematische Ergebnis der Operation korrekt darstellt, wird false zurückgegeben. Andernfalls wird true zurückgegeben. In diesem Fall ist der zugewiesene Wert für * result das mathematische Ergebnis der Operation, das auf die Breite von * result umgebrochen wurde.
InhaltParameter
Rückgabewertfalse wenn der Wert, der * result zugewiesen wurde, das mathematische Ergebnis der Subtraktion korrekt darstellt, true andernfalls. Hinweis
Die Funktionsvorlage
Jeder der Typen type1 , type2 und type3 ist ein cv-unqualifizierter vorzeichenbehafteter oder vorzeichenloser Ganzzahltyp. Es wird empfohlen, eine Diagnosemeldung auszugeben, wenn type2 oder type3 keine geeigneten Integer-Typen sind, oder wenn * result kein modifizierbarer Lvalue eines geeigneten Integer-Typs ist. BeispielDiesen Code ausführen #include <cstdint>
#include <limits>
#include <print>
#include <stdckdint.h>
int main()
{
int16_t result1{};
constexpr std::int8_t x1{-2};
constexpr std::int16_t y1{1};
const bool underflow1{ckd_sub(&result1, x1, y1)};
std::println("{} - {} == {} ({})", x1, y1, result1, underflow1 ? "Underflow" : "OK");
int16_t result2{};
constexpr std::int8_t x2{-2};
constexpr std::int16_t y2{std::numeric_limits<std::int16_t>::max()};
const bool underflow2{ckd_sub(&result2, x2, y2)};
std::println("{} - {} == {} ({})", x2, y2, result2, underflow2 ? "Underflow" : "OK");
int32_t result3{};
constexpr std::int8_t x3{-2};
constexpr std::int16_t y3{std::numeric_limits<std::int16_t>::max()};
const bool underflow3{ckd_sub(&result3, x3, y3)};
std::println("{} - {} == {} ({})", x3, y3, result3, underflow3 ? "Underflow" : "OK");
}
Ausgabe: -2 - 1 == -3 (OK)
-2 - 32767 == 32767 (Underflow)
-2 - 32767 == -32769 (OK)
Referenzen
Siehe auch
| ||||||||||||