, literały całkowite bez sufiksu typu są zawsze int
s. Jednak zarówno gcc jak i klang interpretują 0xffffffff
(lub dowolny literał, który jawnie ustawia bit znaku inny niż przy użyciu -
) jako niepodpisany. Który jest poprawny? (Według this kompilatory są)Czy literalny 0xffffffff int lub unsigned w C++
Odpowiedz
z pkt 2.14.2/2 C++ 11 standardu
Typ liczbę całkowitą dosłownym jest najpierw odpowiedniej listy w tabeli 6 którego wartość może być reprezentowana przez .
Tabela 6 raporty dla stałych szesnastkowym typu powinna wynosić:
int
; lub (jeśli nie pasuje)unsigned int
; lub (jeśli nie pasuje)long int
; lub (jeśli nie pasuje)unsigned long int
; lub (jeśli nie pasuje)long long int
; lubunsigned long long int
.
Zakładając, że wdrożenie ma 32-bitowy int
, ponieważ 0xffffffff
nie pasuje w int
, jego rodzaj powinien być unsigned int
. W przypadku implementacji z 64-bitowym int
typem będzie int
.
Zauważ, że jeśli napisał to samo dosłowne jako dziesiętny stałe zamiast tego typu mogły być tylko:
int
; lub (jeśli nie pasuje)long int
; lub (jeśli nie pasuje)long long int
.
Interesujące. Czy mógłbyś powiązać ofertę z jej internetową stroną, jeśli to możliwe? – deepmax
@MM .: To jest standard C++ 11 (używam wersji roboczej 3485, która jest nieco nowsza od oficjalnego standardu). Projekt można pobrać bezpłatnie [tutaj] (http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3485.pdf). Oficjalny standard jest wypłacany. –
- 1. sprintf unsigned int tablicy w C
- 2. Ograniczenie C++ dla unsigned int poprzez szablon
- 3. Przechowywanie adresu wskaźnika w unsigned int w C
- 4. Jaka jest różnica między Uint32 a unsigned int w C++?
- 5. Konwersja BIGINT UNSIGNED na INT
- 6. Co (int) (unsigned char) (x) robi w C?
- 7. unsigned long long int pow
- 8. C++ podpisane i unsigned long long int vs prędkości
- 9. Jaka jest różnica między unsigned int i signed int w C?
- 10. Czy nagi `char32_t` jest podpisany lub unsigned?
- 11. Niezdefiniowane odwołanie do CryptoPP :: AlignedAllocate (unsigned int)
- 12. Dlaczego nie można używać składni konstruktora w typach "unsigned int"?
- 13. JNI: konwersja unsigned int do jint
- 14. dziwne zachowanie gcc z unsigned int
- 15. Format specifier do skanowania długo unsigned int
- 16. C# Stałe enum lub int
- 17. czytanie „unsigned int” za pomocą „cin”
- 18. Void jako typ literalny?
- 19. Java unsigned byte [2] to int?
- 20. przechowywanie podpisanego skrótu w niższych 16 bitach unsigned int
- 21. rzeczywistym realizacja gdzie sizeof (size_t) <sizeof (unsigned int)
- 22. Dlaczego unsigned int jest tak rzadkie w haskell?
- 23. C++ Wyjątki; int lub std :: exception?
- 24. C++ cast unsigned to signed
- 25. Czy istnieje kompilator c/C++, który może ostrzegać (lub podawać błąd) lub przeliczać konwersję na int?
- 26. Jaka jest różnica między unsigned long/long/int in c/C++?
- 27. Jak mogę zapisać wektor <unsigned char> do pliku, a następnie unsigned int
- 28. Skompiluj dziennik NSLog z unsigned int i unsigned long na iOS i OSX bez ostrzeżenia
- 29. Jak wydrukowaćf "unsigned long" w C?
- 30. różnica między niepodpisanym krótkim int i unsigned short
Nie wiem, ale chcę wiedzieć, dlaczego to ma znaczenie. –
@roger_rowland nie, prawdopodobnie, ale clang ostrzega mnie przed konwersją z unsigned na signed, co jest denerwujące i którego nie zrozumiałem. – Walter
Domyślam się, że punkt to 0xffffffff = 4294967295 to liczby dodatnie i nie mieszczą się w int. –