c - 以十六进制和八进制打印一个带符号的 64 位整数

标签 c

我正在创建一个程序,以十六进制和八进制格式打印一个 signed 64 位变量。我在网上搜索了格式说明符,但只找到了 unsigned 64 位整数的结果。

最佳答案

说明符 %o%x 实际上只是为无符号整数值定义的。在有符号输入的情况下,如果你想显示一个有符号的值,如 -234 以及十六进制的“符号”,例如-ea,您必须单独处理带符号的值。 否则,如果您希望负值显示为正确的无符号转换(即二进制补码表示),只需将其转换为 unsigned:

int main() {

    int input = -234;
    if (input < 0) {
       printf("-%x\n", (unsigned)(-input));
    } else {
       printf("%x\n", (unsigned)input);
    }
    
    printf("%x\n", (unsigned)input);
}

输出:

-ea
ffffff16

关于c - 以十六进制和八进制打印一个带符号的 64 位整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65555783/

相关文章:

无法从 UTF-8 文件中读取某些字符。纯C

c - 通过指针从 C 和 C++ 中的函数返回本地数据

c - 刽子手游戏,语法修复 x86 gcc 汇编和 C

c - 如何覆盖系统c库头?

c - 如何使用 Clang 和 MinGW C/C++ 库编译代码? (float.h 的特殊问题)

使用八进制常量初始化 char 数组

c - 使用 fgets()、strtok()、strcpy() 的 C 语言中的段错误

c - 使用默认(私有(private))子句时出现 OpenMP 错误

C变量和常量值比较不匹配

c - 打印出c中最长的子串