bar*_*nos 2 c c++ printf integer
我最近回答了一个关于SO的问题,并且发现自己在这个过程中对自己的一些事实有点不确定,所以我想对这些事实进行第二次断言:
C和C++中的整数类型:
char:一个大小为1个字节的整数值.
short:一个大小为2个字节的整数值.
long:整数值,大小为4个字节.
long long:一个大小为8个字节的整数值.
类型short,long并且long long通常后跟int.
但是,它不是必须的,我们可以在没有它的情况下使用它们int.
或者,我们可以说明int,但不同的编译器可能会对此有不同的解释.
总结一下:
short与...相同short int但不一定相同int.
long与...相同long int但不一定相同int.
long long与...相同long long int但不一定相同int.
在给定的编译器上,int是short int或者long int或long long int.
使用printf以下方法打印整数
- 从堆栈中printf("%d"...)读取int值.
- 从堆栈中printf("%ld"...)读取long int值.
- 从堆栈中printf("%lld"...)读取long long int值.
所以:
- printf("%ld"...)将在任何给定平台上读取4个字节.
- printf("%lld"...)将在任何给定平台上读取8个字节.
- printf("%d"...)将读取2个字节或4个字节或8个字节,具体取决于int给定平台上的定义.
上面的描述中是否有蛀洞?
谢谢
有几个相当重要的漏洞.
A char总是占用1个字节.这是唯一可以保证尺寸的类型.所有其他字节基本上都是1个或更多字节,并且大到足以容纳指定的值范围(16位为short或int,32位为long64位,64位为long long).
换句话说,你给出的尺寸很常见,但不能保证.
用printf:
intlong intlong long int.如上所述,这些中的每一个都具有指定的最小范围,但不是所需的大小.
同样,标准实际上没有指定机器有一个堆栈(还有一些,比如IBM大型机和旧的Crays,没有),但如果你只考虑抽象的行为要求,那么你得到的肯定是LIFO(类似堆栈的要求.