【问题标题】:Difference between int and unsigned int in C [duplicate]C中int和unsigned int之间的区别[重复]
【发布时间】:2020-07-31 15:35:42
【问题描述】:

我知道unsigned int的范围是0

但是,当我在 C(visual 2015) 中这样输入时

void main(){
   unsigned int k = -10;
   printf("%d",k);
}

那为什么电脑在屏幕上打印-10??我认为应该有错误。

【问题讨论】:

  • 尝试使用%u 说明符。

标签: c


【解决方案1】:

int 默认存储带符号的数字,这意味着它们的范围可以从 -2,147,483,648 到 2,147,483,647。 unsigned int 表示您不会使用负数,因此范围要大得多,因为您已经释放了数字中最左边的位,该位通常用于指示它是否有符号(负数)。所以unsigned int 可以从 0 变为 4,294,967,295。这也适用于像 char 这样的类型,它们通常从 -128 到 127,当 unsigned 时,char 恰好保存一个字节,或者从 0 到 255。

Visual Studio(和大多数编译器)应该在尝试将有符号值存储到无符号类型时发出警告。

当您使用printf("%d",k) 时,%d 告诉printf() 打印出签名的int。这就是它所做的。如果您希望printf() 打印出unsigned int,则需要使用printf("%u")

【讨论】:

    【解决方案2】:

    十六进制形式,-10 为 0xFFFFFFF6

    unsigned int k = -10; 表示

    unsigned int k = 0xFFFFFFF6;

    当你说打印这个值时

    printf("%d",k); 由于 %d 说明符,编译器会将值 (0xFFFFFFF6) 评估为整数。 (检查http://www.cplusplus.com/reference/cstdio/printf/关于这个问题)

    如果您说printf("%u",k);,编译器会将值 (0xFFFFFFF6) 评估为无符号整数,并将打印介于 0-2^32-1 之间的值

    【讨论】:

      猜你喜欢
      • 2012-02-21
      • 2017-09-10
      • 2017-06-20
      • 1970-01-01
      • 2013-11-12
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      相关资源
      最近更新 更多