【推荐】C语言中有符号数与无符号数解析.pdfVIP

  • 4
  • 0
  • 约7.64千字
  • 约 5页
  • 2017-06-10 发布于河南
  • 举报

【推荐】C语言中有符号数与无符号数解析.pdf

【推荐】C语言中有符号数与无符号数解析

C语言中有符号数,与无符号数的辨析 关于有符号数,无符号数,你可能听过两种不同的回答。一种是教科 ,它 会告诉你:计算机用“补码”表示负数。可是有关“补码”的概念一说就得一节课, 这一些我们需要在第6章中用一章的篇幅讲2进制的一切。再者,用“补码”表示 负数,其实一种公式,公式的作用在于告诉你,想得问题的答案,应该如何计算。 却并没有告诉你为什么用这个公式就可以和答案? 0 另一种是一些程序员告诉你的:用二进制数的最高位表示符号,最高位是 , 1 表示正数,最高位是 ,表示负数。这种说法本身没错,可是如果没有下文,那 -1 “1111 么它就是错的。至少它不能解释,为什么字符类型的 用二进制表示是 1111”(16 FF) 进制为 ;而不是我们更能理解的 。(为什么说后者更好 1 -1 理解呢?因为既然说最高位是 时表示负数,那 不是正好是 吗?)。 让我们从头说起。 1、你自已决定是否需要有正负。 就像我们必须决定某个量使用整数还是实数,使用多大的范围数一样,我们 必须自已决定某个量是否需要正负。在计算机中,可以区分正负的类型,称为有 符类型,无正负的类型(只有正值),称为无符类型。 数值类型分为整型或实型,其中整型又分为无符类型或有符类型,而实型则 只有有符类型。 字符类型也分为有符和无符类型。 2、使用二制数中的最高位表示正负。 首先得知道最高位是哪一位?1个字节的类型,如字符类型,最高位是第7 位,2个字节的数,最高位是第15位,4个字节的数,最高位是第31位。不同 长度的数值类型,其最高位也就不同,但总是最左边的那位 (如下示意)。字符 类型固定是 1个字节,所以最高位总是第7位。 (红色为最高位) 单字节数 双字节数:1111111111111111 四字节数:11111111111111111111111111111111 1 0 当我们指定一个数量是无符号类型时,那么其最高位的 或 ,和其它位一 样,用来表示该数的大小。 当我们指定一个数量是无符号类型时,此时,最高数称为“符号位”。为1时, 表示该数为负值,为0时表示为正值。 3、无符号数和有符号数的范围区别。 无符号数中,所有的位都用于直接表示该值的大小。有符号数中最高位用于 表示正负,所以,当为正值时,该数的最大值就会变小。我们举一个字节的数值 对比: 255 1*27+ 1*26+ 1*25+ 1*24+ 1*23+ 1* 无符号数: 值: 22+ 1*21+ 1*20 有符号数值:127 1*26+ 1*25+ 1*24+ 1*23+ 1*22+ 1*21+ 1*20 同样是一个字节,无符号数的最大值是255,而有符号数的最大值是127。 原因是有符号数中的最高位被挪去表示符号了。并且,我们知道,最高位的权值 也是最高的 (对于1字节数来说是2 的7次方=128),所以仅仅少于一位,最大 值一下子减半。 不过,有符号数的长处是它可以表示负数。因此,虽然它的在最大值缩水了, 却在负值的方向出现了伸展。我们仍一个字节的数值对比: 无符号数: 0255 有符号数: -1280 127 有符号的数据类型的最大值的计算方

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档