Esiste una funzione di libreria che dato un intero mi restituisca +1 se è positivo, -1 se è negativo e 0 se è nullo?
Se non è proprio così almeno qualcosa di simile...
Esiste una funzione di libreria che dato un intero mi restituisca +1 se è positivo, -1 se è negativo e 0 se è nullo?
Se non è proprio così almeno qualcosa di simile...
No, ma te la puoi scrivere (magari in versione template) in 10 secondi.
Amaro C++, il gusto pieno dell'undefined behavior.
Beh ad esempio la signbit() ho visto che mi ritorna 0 se il numero è non negativo, ma se è negativo ritorna 512...perchè?
La documentazione dice:Originariamente inviato da starcraftworld
Beh ad esempio la signbit() ho visto che mi ritorna 0 se il numero è non negativo, ma se è negativo ritorna 512...perchè?
Per cui qualunque valore diverso da zero indica che il numero è negativo; quel 512 probabilmente deriva da un'operazione di and binario sul bit del segno.The signbit() macro returns nonzero if the sign of x is negative; otherwise it returns zero.
In ogni caso, signbit funziona solo sui tipi in virgola mobile, e non è standard C++, ma C99.
Ribadisco, in C++ ti puoi scrivere una funzione del genere in questa maniera:
Il compilatore dovrebbe essere sufficientemente furbo da ottimizzare questa roba in maniera adeguata.codice:template<typename T> T sign(T In) { if(In>(T)0) return 1; else if(In<(T)0) return -1; return 0; }
Amaro C++, il gusto pieno dell'undefined behavior.