为什么Visual Studio没有将无符号值显示为int?

时间:2016-01-05 14:42:28

标签: c++ c visual-studio-2012 int unsigned

我正在使用VS 2012,而我正在阅读这本教授C \ C ++基础的书。这本书很老了,它不是在VS中教,而是在Borland C ++中教。本课程教授如何将无符号值转换为int。在书中,它表示int数字的值为-32768和32767,无符号的值为0到65535.在书中给出的数字为42000,表示unsigned为42000且为int是-23536。在VS中,它显示unsignedint均为42000.

#include <stdio.h>
void main(void)
{
    unsigned int value = 42000;

    printf("Show 42000 as unsigned %u\n", value);
    printf("Show 42000 as int %d\n", value);

}

输出:

Show 42000 as unsigned 42000
Show 42000 as int 42000

附注:尝试了%d%i;没有工作。

6 个答案:

答案 0 :(得分:8)

您的旧书提供了16位intunsigned的范围。较新的编译器使用以太网32位或64位。

答案 1 :(得分:6)

烧掉那本书。它永远不会是正确的。

int的最小范围是-32767到+32767,因为它可以是1的补码16位数。

未指定最大范围。

VS通常使用32位2的补码值int

顺便说一句,%d使用unsigned的行为是未定义。如果您编写并编译代码,则编译器保留吃猫的权利。如果该书使用了该构造并声称它是便携式的,那么再次刻录

答案 2 :(得分:4)

很可能你有一个32位宽的int,它可以容纳[-2147483648,2147483647]所以你不会像书本试图那样溢出它。尝试使用大于2147483647但小于4294967295的值,这是32但无符号整数可以容纳的最大值。

答案 3 :(得分:4)

本书的内容是正确的,假设int为16位。在大多数现代编译器中,它是32位或64位。

如果你想用给定的值说明这一点,VS提供__int16unsigned __int16这些整数类型保证为16位。

编辑:

您还可以使用从VS 2010及更高版本开始的标准类型int16_tuint16_t。请务必#include <stdint.h>才能访问它们。

答案 4 :(得分:4)

您可以确定有符号和无符号整数的可接受范围。

要在C中执行此操作,您必须包含标题

#include <limits.h>

并使用常量

INT_MAX
INT_MIN
UINT_MAX
UINT_MIN

例如

printf( "INT_MAX = %d\n", INT_MAX );

在C ++中,您可以使用标题

执行相同的操作
#include <limits>

例如

std::cout << "The maximnun value of type int is " 
          << std::numeric_limits<int>::max()
          << std::endl;

答案 5 :(得分:2)

Borland C ++很老了,经历了很多过渡 - 现在被称为Embarcadero的XE Suite。就像有人说的那样,那本书假设你使用的是16位编译器,所以也许值得更新一些东西:)