#c #typecasting-operator
#c #приведение к типу-оператор
Вопрос:
Я пытался преобразовать шестнадцатеричное число в целое число со знаком. Но он не распознает отрицательное число.
Вот пример. Нужно ли мне подписывать extend отдельно вместо приведения?
#include <iostream>
using namespace std;
int main()
{
cout<<"Hello World";
int64_t input = static_cast<int64_t>(0xf8546);
cout << "Input: " << input << endl;
return 0;
}
Комментарии:
1. В вашем коде нет отрицательного числа.
2. Как вы думаете, почему
0xf8546
это отрицательное 64-битное число?3. Оно начинается с 1, верно?
4.
0x1
также начинается с 1 — как вы думаете, оно отрицательное?5.
0xf8546
эквивалентно0x00000000000f8546
Ответ №1:
В C нет таких вещей, как отрицательные литералы. 0xf8546
является положительным. Его тип зависит от вашей платформы.
Если вам нужно отрицательное шестнадцатеричное число, напишите
-0xf8546
Это состоит из оператора унарного отрицания, применяемого к литералу 0xf8546
, таким же образом, что -1
и унарное отрицание литерала 1
.