C语言中的int是多少个字节?

贝多芬的悲伤。 发布于 2013/04/25 12:51
阅读 10K+
收藏 3
32位的机器上,和64位的机器上分别是多少字节? @中山野鬼
加载中
0
PYPlus
PYPlus

引用来自“贝多芬的悲伤。”的答案

引用来自“PYPlus”的答案

一般的 int类型存储在计算机的一个字中, iso/ansi c规定的int类型最小范围是-32768 - 32767 。常见的  32位机器 为4个字节  64位机器为64bit 8个字节。这中概念 随便一本c语言书都有讲吧  c仅仅规定了short类型不会比int长 long类型不会比int短  ,纠结于int 和long有多长意义不大
不是纠结,最近找实习,面试的时候问到了。然后,我百度和google了好久,还查了一下chrome的源码,发现不仅仅跟机器有关,还跟系统有关。查了一下《C++程序设计语言》也没有说明这个问题,只是说具体实现有关。C语言标准是说是一个机器字长,但是又有资料说在64位上有的系统实现是4字节,有的是8字节。所以,越查下去,我越糊涂了。

那就是我上面说的了,int最小是16bit 长度 ,short不会比int长  long不会比int短 就这样 很宽松。你好好看看《c primer plus》关于数据类型的章节,还有你去网上下载一份c语言标准 这是最权威的了,iso/iec1989 或iso/iec9899:1999  里面的5.2.4.2.1节里面有说各种int类型的尺寸

Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign.
上面的句子来自对c99 标准文档。说的很清楚 具体实现的在绝对值上应该大于或等于下面所列出的值且符号相同 ,下面的大小也是来自c99文档

— minimum value for an object of type int 
INT_MIN -32767 // −(215 − 1) 
— maximum value for an object of type int
INT_MAX +32767 // 215 − 1 
— maximum value for an object of type unsigned int 
UINT_MAX 65535 // 216 − 1 
— minimum value for an object of type long int
LONG_MIN -2147483647 // −(231 − 1) 
— maximum value for an object of type long int
LONG_MAX +2147483647 // 231 − 1 
— maximum value for an object of type unsigned long int
ULONG_MAX 4294967295 // 232 − 1
所以int的最小是16bit就来自上面的INT_MAX  INT_MIN

如果你要看一个机器上的具体实现int类型有多大 你可以这样看 要包含limit.h

#include <stdio.h>
#include <limits.h>  

int main(void)
{   
    fprintf(stdout,"%d\n",INT_MAX);  
    fprintf(stdout,"%d\n",INT_MIN);
    fprintf(stdout,"%u\n",UINT_MAX);
    return 0;
}

贝多芬的悲伤。
查了一下C99标准,确实如你所说。谢谢你辛苦的回复了。
PYPlus
PYPlus
centos6.3 32bit上的输出 2147483647 -2147483648 4294967295
0
Hobo
Hobo
32bit/8 和64bit/8
0
贝多芬的悲伤。

引用来自“Hobo”的答案

32bit/8 和64bit/8
那long类型呢?也是不同的机器上不一样吗?
0
PYPlus
PYPlus
一般的 int类型存储在计算机的一个字中, iso/ansi c规定的int类型最小范围是-32768 - 32767 。常见的  32位机器 为4个字节  64位机器为64bit 8个字节。这中概念 随便一本c语言书都有讲吧  c仅仅规定了short类型不会比int长 long类型不会比int短  ,纠结于int 和long有多长意义不大
0
Hobo
Hobo
具体问题 具体分析把 你自己sizeof看一下
0
m
mechos
不同机器上不一样,我记得标准定义是int不小于16bit, long不小于(可以等于)int
m
mechos
回复 @贝多芬的悲伤。 : 我看 C primer plus里讲的,好像是ANSI C里定义的
贝多芬的悲伤。
sizeof(long) >= sizeof(int)吗,请问有什么书上有关于这个问题的吗?
0
贝多芬的悲伤。

引用来自“PYPlus”的答案

一般的 int类型存储在计算机的一个字中, iso/ansi c规定的int类型最小范围是-32768 - 32767 。常见的  32位机器 为4个字节  64位机器为64bit 8个字节。这中概念 随便一本c语言书都有讲吧  c仅仅规定了short类型不会比int长 long类型不会比int短  ,纠结于int 和long有多长意义不大
不是纠结,最近找实习,面试的时候问到了。然后,我百度和google了好久,还查了一下chrome的源码,发现不仅仅跟机器有关,还跟系统有关。查了一下《C++程序设计语言》也没有说明这个问题,只是说具体实现有关。C语言标准是说是一个机器字长,但是又有资料说在64位上有的系统实现是4字节,有的是8字节。所以,越查下去,我越糊涂了。
0
贝多芬的悲伤。

引用来自“Hobo”的答案

具体问题 具体分析把 你自己sizeof看一下
试了,跟查的资料不一样,在64位上也还是4字节。所以,想问问C语言高手,看能不能有更好的解释。
0
逝水fox
逝水fox

http://zh.wikipedia.org/wiki/%E5%AD%97_%28%E8%AE%A1%E7%AE%97%E6%9C%BA%29

字长最后有列表

0
txgcwm
txgcwm
这中问题看书或自己搜索。
返回顶部
顶部