i*****o 发帖数: 1714 | 1 一直以为int和long不管32还是64都是4个byte,怎么apple说int和long在64位下不一样
大?难道ansi没这方面的规定?
★ 发自iPhone App: ChineseWeb 8.0.1 |
k**********g 发帖数: 989 | 2
是被 MSVC 搞昏吧。除了 MSVC 有这样规定(为了 MS 自家代码的向後兼容),没听过
其他编译器有这样的保证。
【在 i*****o 的大作中提到】 : 一直以为int和long不管32还是64都是4个byte,怎么apple说int和long在64位下不一样 : 大?难道ansi没这方面的规定? : ★ 发自iPhone App: ChineseWeb 8.0.1
|
m*******n 发帖数: 305 | |
g****t 发帖数: 31659 | 4 这是个compiler问题.
【在 m*******n 的大作中提到】 : char[4] 是否可以保证32位?
|
t****t 发帖数: 6806 | 5 actually char[4] is guaranteed to be 4 bytes. however 1byte=8bit is not
guaranteed, although the risk is quite minimal.
for compatibility, try int32_t in , if it exist.
【在 g****t 的大作中提到】 : 这是个compiler问题.
|
p*****w 发帖数: 429 | 6 这样可以自己定义吗
?
#ifndef int32
#if sizeof(long)==4
#define int32 long
#endif
#if sizeof(int)==4
#endif
【在 t****t 的大作中提到】 : actually char[4] is guaranteed to be 4 bytes. however 1byte=8bit is not : guaranteed, although the risk is quite minimal. : for compatibility, try int32_t in , if it exist.
|
d****i 发帖数: 4809 | 7 ANSI C没有规定int和long的字节数,因为在不同的CPU架构和C编译器下,int和long的
字长都不一样,比如一般都认为int是32位,但是在有的16位MCU下,int却是16位。
【在 i*****o 的大作中提到】 : 一直以为int和long不管32还是64都是4个byte,怎么apple说int和long在64位下不一样 : 大?难道ansi没这方面的规定? : ★ 发自iPhone App: ChineseWeb 8.0.1
|
d****i 发帖数: 4809 | 8 所以比较好的方法是,针对不同的处理器,采用头文件types.h来自定义:
#ifdef _ARM_CORTEX
typedef int INT32;
typedef unsigned int UINT32;
typedef short INT16;
......
#endif
【在 i*****o 的大作中提到】 : 一直以为int和long不管32还是64都是4个byte,怎么apple说int和long在64位下不一样 : 大?难道ansi没这方面的规定? : ★ 发自iPhone App: ChineseWeb 8.0.1
|
|
n***e 发帖数: 723 | 9 不要看见什么就来黑微软,微软这么做是因为AMD64上的int是4位的。
http://wiki.inspircd.org/Type_Sizes#AMD64_Gentoo_Linux_64bit.2C
【在 k**********g 的大作中提到】 : : 是被 MSVC 搞昏吧。除了 MSVC 有这样规定(为了 MS 自家代码的向後兼容),没听过 : 其他编译器有这样的保证。
|
v*****u 发帖数: 1796 | 10 同意. 规定是 long的位数>=int
【在 d****i 的大作中提到】 : ANSI C没有规定int和long的字节数,因为在不同的CPU架构和C编译器下,int和long的 : 字长都不一样,比如一般都认为int是32位,但是在有的16位MCU下,int却是16位。
|
|
|
c*****m 发帖数: 1160 | 11 我印象谭浩强的书里有说这个:
在 ANSI C里,
short <= int <= long
而且说了具体每个编译器实现都可以不一样,只要实现这个公式就是标准。 |
k**********g 发帖数: 989 | 12
(我是软粉。)
This post talks about integer widths from the language / compiler
perspective. This post is strictly unrelated to the design or limitations of
the underlying CPU architecture. In all cases, compiler has the
responsibility of enabling, and if necessary, emulating the integer types of
various widths.
Turbo Pascal supports 32-bit integer types on 16-bit DOS processes and CPUs.
It provides the REAL floating point type, which is 6 bytes (48 bits) and is
strictly emulated in software.
【在 n***e 的大作中提到】 : 不要看见什么就来黑微软,微软这么做是因为AMD64上的int是4位的。 : http://wiki.inspircd.org/Type_Sizes#AMD64_Gentoo_Linux_64bit.2C
|
t****t 发帖数: 6806 | 13 大多数int都是32位的. 但楼主问的不是这个, 他问的是为什么long居然是64位的. 我们
说, 除了MSVC, 其它64位编译器几乎都规定long是64位的. 你贴的link恰好说明了这一
点.
另外, "AMD64上的int是4位(4byte?)"这个说法本身不make sense. int的宽度并不由CP
U决定.
【在 n***e 的大作中提到】 : 不要看见什么就来黑微软,微软这么做是因为AMD64上的int是4位的。 : http://wiki.inspircd.org/Type_Sizes#AMD64_Gentoo_Linux_64bit.2C
|
x****u 发帖数: 44466 | 14 MS的编译器在AMD64架构和安腾上的字节长也不一样。
我们
CP
【在 t****t 的大作中提到】 : 大多数int都是32位的. 但楼主问的不是这个, 他问的是为什么long居然是64位的. 我们 : 说, 除了MSVC, 其它64位编译器几乎都规定long是64位的. 你贴的link恰好说明了这一 : 点. : 另外, "AMD64上的int是4位(4byte?)"这个说法本身不make sense. int的宽度并不由CP : U决定.
|
c****p 发帖数: 6474 | 15 实现决定。long>=int即可。
现在多数64位编译器long都是64位。
【在 i*****o 的大作中提到】 : 一直以为int和long不管32还是64都是4个byte,怎么apple说int和long在64位下不一样 : 大?难道ansi没这方面的规定? : ★ 发自iPhone App: ChineseWeb 8.0.1
|
n***e 发帖数: 723 | 16 Huh, you are correct on this. My apologies.
of
of
CPUs.
is
【在 k**********g 的大作中提到】 : : (我是软粉。) : This post talks about integer widths from the language / compiler : perspective. This post is strictly unrelated to the design or limitations of : the underlying CPU architecture. In all cases, compiler has the : responsibility of enabling, and if necessary, emulating the integer types of : various widths. : Turbo Pascal supports 32-bit integer types on 16-bit DOS processes and CPUs. : It provides the REAL floating point type, which is 6 bytes (48 bits) and is : strictly emulated in software.
|