当前位置:  开发笔记 > 人工智能 > 正文

有符号和无符号变量之间有什么区别?

如何解决《有符号和无符号变量之间有什么区别?》经验,为你挑选了3个好方法。

我已经在C和C++的上下文中看到了这些,但有符号和无符号变量之间有什么区别?



1> coobird..:

有符号变量(如有符号整数)将允许您表示正数和负数范围内的数字.

无符号变量(例如无符号整数)只允许您以正数表示数字.

相同类型(例如intbyte)的无符号和有符号变量都具有相同的范围(范围分别为65,536和256个数字),但无符号可以表示比相应的有符号变量更大的幅度数.

例如,a unsigned byte可以表示来自0to的值255,而signed byte可以表示-128to 127.

签名数字表示的维基百科页面解释了位级别表示的差异,整数(计算机科学)页面提供了每个有符号/无符号整数类型的范围表.



2> 小智..:

虽然通常称为"符号位",但我们通常使用的二进制值没有真正的符号位.

大多数计算机使用二进制补码算法.通过取一个补码(翻转所有位)并添加一个来创建负数:

      5 (decimal) -> 00000101 (binary)
      1's complement: 11111010
      add 1: 11111011 which is 'FB' in hex


这就是有符号字节保存-128到+127而不是-127到+127的值的原因:

      1 0 0 0 0 0 0 0 = -128
      1 0 0 0 0 0 0 1 = -127
          - - -
      1 1 1 1 1 1 1 0 = -2
      1 1 1 1 1 1 1 1 = -1
      0 0 0 0 0 0 0 0 = 0
      0 0 0 0 0 0 0 1 = 1
      0 0 0 0 0 0 1 0 = 2
          - - -
      0 1 1 1 1 1 1 0 = 126
      0 1 1 1 1 1 1 1 = 127
      (添加1到127给:)
      1 0 0 0 0 0 0 0   我们在这个图表的顶部看到的是-128.


如果我们有一个正确的符号位,则值范围将是相同的(例如,-127到+127),因为为该符号保留了一个位.如果最重要的位是符号位,我们将:

      5 (decimal) -> 00000101 (binary)
      -5 (decimal) -> 10000101 (binary)

在这种情况下有趣的是我们有零和负零:
      0 (decimal) -> 00000000 (binary)
      -0 (decimal) -> 10000000 (binary)


我们没有-0和二进制补码; 什么是-0是-128(或更一般,比最大正值多一个).虽然我们做一个人的补充; 所有1位均为负0.

在数学上,-0等于0.我依稀记得一台计算机,其中-0 <0,但我现在找不到任何参考.


非常感谢你!我真的很困惑,为什么签名字节是-128到127而不是-127到127.这个答案需要更多的投票!

3> Chris Hynes..:

有符号变量使用一位来标记它们是正还是负.无符号变量没有这个位,这样他们就可以存储在同一个空间较大的数字,但只为非负数,如0高.

更多信息:无符号和有符号整数

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有