枚举enum的问题。如何让元素是无符号整型? 枚举enum{a,b,c,d} enumA的内存结构是什么。为什么不论一个enum有多少个元素,sizeof(enumA)都

时间:2022-08-23 04:15:10
枚举enum的问题。如何让元素是无符号整型? 枚举enum{a,b,c,d} enumA的内存结构是什么。为什么不论一个enum有多少个元素,sizeof(enumA)都等于4?

7 个解决方案

#1


enum{a=1,b,c,d}  这样后面的数据就都是>0 的,
然后使用的使用赋值给 无符号整数就是了 .....

内存结构,
我的理解是有些接近 int,
枚举值就是 int值,
一个枚举变量赋值, 就相当于是一个int赋值,
只是 int 赋值在整数范围都是可以的,
而 枚举赋值就是被枚举的几个值可以被赋值 ...

理解的不对勿怪勿怪。

#2


typedef enum tagE_TYPE {
a, b, c, d, e
} E_TYPE;

1. 
默认就是无符号整型,除非你定义的时候写成a = -1, b, c, ...

2. 
E_TYPE e_type = b; // 当定义e_type的时候,内存分布就是:分配一个int字节.

#3


关于内存分布

是不是这样 一个enum就是一个字节,之所以有多个元素及其关系,完全是由语言规则和编译器来实现的。编译器来判断这个enum有多少个元素,来决定某个元素的取值。

ENUM的元素的取值其实都是常量,编译器会在把被引用元素替换为数值

对于enum{a,b,c,d}的每个元素,其实跟
#define a 0
#define b 1
是一样的。

而结构体中的数据值都是由CPU运算出来的,是变量。


关于有符号还是无符号

我原来是这么用的,enum {cmd=0x80000004}
我对各种进制是不熟悉的。

0x80000001本来就是一个负数吗????

从VC变量监视器里看,cmd的值是-2147483647.
当然,把cmd赋值给一个无符号整型 unsigned int iCmd=cmd;
iCmd的值变成了2147483649。

有符号32位 的范围是  -2 147 483 648~2 147 483 647 

是不是我这样定义enum {a=1,cmd=0x80000004} cmd的值就是2147483649了呢?

#4


32位系统的enum默认都是32位,方便操作与位对齐,即使是bool型也是一样

#5


bool是1字节 8位。

#6


up

#7


enum就是int型的常量.
enum {a=1,cmd=0x80000004}  cmd还是负的.
c语言没有bool类型,
都是enum bool(false,true);这样false,true也是int类型的常量值0,1;

#1


enum{a=1,b,c,d}  这样后面的数据就都是>0 的,
然后使用的使用赋值给 无符号整数就是了 .....

内存结构,
我的理解是有些接近 int,
枚举值就是 int值,
一个枚举变量赋值, 就相当于是一个int赋值,
只是 int 赋值在整数范围都是可以的,
而 枚举赋值就是被枚举的几个值可以被赋值 ...

理解的不对勿怪勿怪。

#2


typedef enum tagE_TYPE {
a, b, c, d, e
} E_TYPE;

1. 
默认就是无符号整型,除非你定义的时候写成a = -1, b, c, ...

2. 
E_TYPE e_type = b; // 当定义e_type的时候,内存分布就是:分配一个int字节.

#3


关于内存分布

是不是这样 一个enum就是一个字节,之所以有多个元素及其关系,完全是由语言规则和编译器来实现的。编译器来判断这个enum有多少个元素,来决定某个元素的取值。

ENUM的元素的取值其实都是常量,编译器会在把被引用元素替换为数值

对于enum{a,b,c,d}的每个元素,其实跟
#define a 0
#define b 1
是一样的。

而结构体中的数据值都是由CPU运算出来的,是变量。


关于有符号还是无符号

我原来是这么用的,enum {cmd=0x80000004}
我对各种进制是不熟悉的。

0x80000001本来就是一个负数吗????

从VC变量监视器里看,cmd的值是-2147483647.
当然,把cmd赋值给一个无符号整型 unsigned int iCmd=cmd;
iCmd的值变成了2147483649。

有符号32位 的范围是  -2 147 483 648~2 147 483 647 

是不是我这样定义enum {a=1,cmd=0x80000004} cmd的值就是2147483649了呢?

#4


32位系统的enum默认都是32位,方便操作与位对齐,即使是bool型也是一样

#5


bool是1字节 8位。

#6


up

#7


enum就是int型的常量.
enum {a=1,cmd=0x80000004}  cmd还是负的.
c语言没有bool类型,
都是enum bool(false,true);这样false,true也是int类型的常量值0,1;