在 C 中是什么signed
意思?我有这张表要显示:
这signed char
128
对+127
. 128
也是一个正整数,那么这怎么可能+128
呢+127
?或者做128
和+127
有不同的含义?我指的是 Apress开始 C书。
有符号整数可以表示负数;未签名的不能。
有符号整数如果溢出则具有未定义的行为,而无符号整数使用模数环绕。
请注意,该表不正确。首先,它缺少-
符号(例如 -128 到 +127)。其次,该标准不保证这些类型必须在这些范围内。
默认情况下,C 中的数值是有符号的,这意味着它们可以是负数也可以是正数。另一方面,无符号值不允许负数。
因为它只是关于内存,所以最后所有的数值都以二进制形式存储。一个 32 位无符号整数可以包含从所有二进制 0 到所有二进制 1 的值。当涉及到 32 位有符号整数时,这意味着它的一个位(最高有效位)是一个标志,它将值标记为正数或负数。所以,这是解释问题,它告诉值是有符号的。
正符号值的存储方式与无符号值相同,但负数使用二进制补码方法存储。
如果要在二进制中写入负值,首先写入正数,然后将所有位取反,最后加 1。当二进制补码中的负值与相同大小的正数相加时,结果将为 0。
在下面的示例中,让我们处理 8 位数字,因为它很容易检查:
positive 95: 01011111
negative 95: 10100000 + 1 = 10100001 [positive 161]
0: 01011111 + 10100001 = 100000000
^
|_______ as we're dealing with 8bit numbers,
the 8 bits which means results in 0
该表缺少缺点。有符号字符的范围是-128 到+127;同样适用于桌子上的其他类型。
这是书中的一个错字;signed char 从 -128 变为 127。
有符号整数使用二进制补码表示形式存储,其中第一位用于指示符号。
在 C 中,字符只是 8 位整数。这意味着它们可以从 -(2^7) 变为 2^7 - 1。这是因为我们使用数字的最后 7 位和符号的第一位。0 表示正数,1 表示负数(以二进制补码表示)。
无符号字符没有符号,因此它们可以使用所有 8 位。从 (00000000)b = 0 到 (11111111)b = 255。
带符号的数字是带有 + 或 - 的数字。例如 +2 和 -6 是有符号数。有符号数可以存储正数和负数,这就是它们具有更大范围的原因。即-32768到32767
无符号数字只是没有符号的数字。他们总是积极的。它们的范围是从 0 到 65535。
希望能帮助到你
有符号通常意味着数字前面有一个 + 或 - 符号。这意味着 unsigned int、unsigned shorts 等不能为负数。
没有人提到这一点,但表中的 int 范围是错误的:它是
-2^(31) to 2^(31)-1
IE,
-2,147,483,648 to 2,147,483,647
首先,您的表格是错误的……缺少负数。参考 char.... 类型,您可以表示所有 256 种可能性,因为 char 有一个字节表示 2^8。所以现在你有两种选择来设置你的范围。从 -128 到 +128 或 0 到 255。第一个是有符号字符,第二个是无符号字符。如果您使用整数,请注意您使用的是哪种操作系统。16 位、32 位或 64 位。整数(16 位、32 位、64 位)。char 始终只有 8 位值。
有符号整数可以具有负值和正值。而无符号整数只能有正值。
对于使用二进制补码的有符号整数,这是最常用的,范围是(取决于整数的位宽):
char s -> range -128-127
unsigned char 具有以下范围:
unsigned char s -> range 0-255