Преобразование шестнадцатеричного числа в целое число со знаком

#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 .