【问题标题】:Signed and Unsigned Integers有符号和无符号整数
【发布时间】:2015-02-17 04:52:48
【问题描述】:

我正在进行一些修订,我遇到了一个问题,询问有符号整数和无符号整数中的 10011001 是什么。我知道无符号整数是 153,因为无符号整数中没有负数,但我是否正确地说 10011001 的有符号整数是 -153 还是我犯了一个错误?

【问题讨论】:

    标签: binary unsigned signed


    【解决方案1】:

    无符号数和有符号数的区别在于其中一位用于指示正​​数或负数。

    所以在你的例子中你有 8 位。

    如果我将 is 视为已签名,那么我有 7 位可以使用:2^7

    • 000 0000 = 0
    • 111 1111 = 127
    • 001 1001 = 25 那么最高有效位会导致发生以下计算。
    • (25 - 128) = -103

    如果我使用所有 8 位,那么我可以使用无符号位:2^8

    • 0000 0000 = 0
    • 1111 1111 = 255
    • 1001 1001 = 153

    这是演示答案的代码:

    char *endptr;
    char binary[11] = "10011001";  // need an extra char for the termination
    
    char x = (char)strtol(binary, &endptr, 2);
    unsigned char y = (unsigned char)strtol(binary, &endptr, 2);
    
    printf("%s to   signed char (1 byte): %i\n", binary, (short)x);
    printf("%s to unsigned char (1 byte): %u\n", binary, y);
    

    输出:

    【讨论】:

    • 所以答案是 -25 ?
    • 我的计算不正确。我已经更新了我的答案。
    猜你喜欢
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 2013-10-27
    • 1970-01-01
    • 2010-09-19
    相关资源
    最近更新 更多