【问题标题】:Signed and unsigned integers?有符号整数和无符号整数?
【发布时间】:2013-10-02 16:01:59
【问题描述】:

有人可以向我解释这两个吗,因为我必须在我的作业中对它们都进行解释。

我当然知道什么是普通整数,并用以下来描述它:

“整数是一个整数,可以是正数、负数和零,但不能有小数点。”

但我只是不确定签名和未签名。

谢谢

【问题讨论】:

  • "Signed" 包括符号(负号或正号)。 “无符号”不能——只能是非负数。您可能会在 Wikipedia 或其他网站上找到大量信息。

标签: integer unsigned signed


【解决方案1】:

有符号整数和无符号整数的区别在于,整数需要一个字节来保存符号。

例如,使用两个二进制数字,您可以有以下内容:

Base 2   Base 10
00       0
01       1
10       2
11       3

但是,如果我们取第一个数字表示负数 (0) 或正数 (1)

Base 2   Base 10
01       -1
00       0
10       1
11       2

或者,如果我们希望 1 为负数,而 0 为正数:

Base 2   Base 10
01       1
00       0
10       -1
11       -2

如需进一步阅读,请查看Two's compliment 上的维基百科文章

【讨论】:

  • "一个字节的整数被使用.."应该是"一个的整数被使用.."
【解决方案2】:

在大多数语言中,当您声明一个整数时,您就是在声明一个有符号整数。如果你想声明一个无符号整数,你必须特别告诉编译器。例如在c#中

int a; // Signed int
uint b; // Unsigned int.

不同之处在于,在有符号整数中,其中一位用于指示数字是正数还是负数。在无符号整数中,该位用于保存一个值。效果是您可以在 unsigned in 中保存两倍的绝对值,就像在有符号 int 中一样。或者更清楚地说,C# 整数的范围是 -2,147,483,648 到 2,147,483,647,而 uint 的范围是 0 到 4,294,967,295。两种数据类型都是 32 位数据类型。

【讨论】:

    【解决方案3】:

    一般说int的时候,就是signed int。 (有符号) int 的范围为 -32768 - 32767 但是 unsigned int 的范围是 0 - 65535

    int 的无符号变量类型可以保存零和正数,但有符号的 int 可以保存负数、零或正数。

    【讨论】:

    • 这对于 16 位是正确的,但对于 32、64 位等则不准确。如果您修改,那么我的 -1 将变为 +1。
    猜你喜欢
    • 2015-02-17
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 2013-06-02
    • 2013-10-27
    • 1970-01-01
    相关资源
    最近更新 更多