符号整数和无符号整数[式两份]

问题描述 投票:1回答:5

这个问题已经在这里有一个答案:

我学习C语言有两种不同的整数类型,符号/无符号。

符号整数可呈现正数和负数。我们为什么需要无符号整数呢?

c unsigned-integer
5个回答
0
投票

一个字的回答是“范围”!

当声明有符号整数,它需要4个字节/ 32位存储器(32位系统)。出的那些32个比特,1个比特为符号和其他31位表示数。意味着可以代表2,147,483,648之间的任何数到2,147,483,647即2 ^ 31。

如果你想使用2,147,483,648?去8个字节?但是,如果你没有在负数感兴趣的话,那么是不是它的4个字节的浪费?

如果你使用unsigned int类型,所有32位代表你的号,你不需要备用1位标志。因此,与无符号整数,则可以从0到4294967295即2 ^ 32

这同样适用于其他数据类型。


0
投票

其原因是整型总是有一个固定的大小。在大多数系统中,整数是32位大。

因此,没有有符号或无符号整数的事情,总是需要相同的内存大写金额。而这正是符号和无符号有所不同:范围

其中一个无符号的整数的范围为0〜4294967295(2³²-1)中,带符号的整数的范围为-2147483647到2147483648


0
投票
  • unsigned类型有存储的额外位,让他们2CHAR_BIT *的sizeof(类型)的最大震级-1正值。这就是为什么类型,如size_t,这意味着可以存储文件,字符串,数组等的尺寸是无符号。 随着符号整数,一个位保留为标志,所以如果int是32位长,你只能得到31位来存储数的大小。一个unsigned int没有这个限制; MSB被用于幅度为好,但它是以牺牲不再能够为负的费用。
  • 符号整数溢出是由C标准未定义,而无符号整数溢出是保证环绕式和复位到零。例如,下面的代码调用未定义的行为在C: int a = INT_MAX; a++; 而这是保证环绕式回零: unsigned int a = UINT_MAX; a++;
  • 无符号的类型通常是有关执行位操作更好

0
投票

有二/三方面的原因,因为是c必须提供的可能性,以程序员的最大范围。

第一个是一个无符号整数可以相对于其对应签署保持双(正)值。同时,我们也不想浪费任何单个位吧?

第二个是一个协议,或一些数据结构的程序必须应付,可以使用无符号值,所以它是很方便的具有该数据类型。

三是处理器实际上具有无符号类型,所以C语言给他们提供。可能有哪些继电器上溢出,例如算法。

可以有另外的动机,可能是我不记得他们。

就个人而言,我做在嵌入式应用中大量使用无符号整数。例如,使用一个无符号的字符作为索引到256个元素的循环缓冲区,使得它简单而快速递增指标,不检查溢出的,因为当指数溢出,这不正是我想要它做的(复位零)。同样,也有可能是其他很多情况下,我刚刚讲的:第一,在我脑海中。


0
投票

这是所有关于内存。它们被用来表示更大数目而不使用较大的内存量。

数以二进制形式存储在计算机上。签名数值使用一种称为补过程中的正数转变为在第一位,这可能代表了最高值的一个不考虑任何计算消极的。

这意味着,您所选择的数字签名的类型只能存储N个可用的最大比特值减1位,其余位将被用来决定价值的符号,而一个无符号类型的选择可以使用所有的其可用位到它的值存储与不能够表示负值的缺点。

© www.soinside.com 2019 - 2024. All rights reserved.