C语言中,对枚举值赋值是啥意思?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中,对枚举值赋值是啥意思?相关的知识,希望对你有一定的参考价值。

typedef enum GPIO_Mode_AIN = 0x0,
GPIO_Mode_IN_FLOATING = 0x04,

GPIO_Mode_IPD = 0x28,
GPIO_Mode_IPU = 0x48,

GPIO_Mode_Out_OD = 0x14,

GPIO_Mode_Out_PP = 0x10,

GPIO_Mode_AF_OD = 0x1C,

GPIO_Mode_AF_PP = 0x18 GPIOMode_TypeDef;

就是使枚举成员拥有指定值,而不是特殊值。

枚举类型定义规定,默认第一项枚举成员值为0,后一项枚举成员的值自动取前一个枚举成员的值加1。

但实际应用中,第一项的值不一定为0,所有枚举变量也不一定是连续的,这时就需要显式赋值。

enum TEST

   TEST1 =1, //从1开始,而不是从0.
   TEST2,//默认上一个加1,所以这个值是2.
   TEST10 = 10, //出现不连续需求,这个值是10.
   TEST11, //上一个加一,这个值是11.
;

在使用枚举赋值时,需要注意:

1 不可以有重复值,否则会报错;

2 尽量从小到大排列,虽然乱序编译器不会报错,但会影响阅读和维护。

参考技术A 对枚举赋值是确定每个量的值,不然每个量的值是在前一个量的值得基础上加1的……希望可以帮到你追问

例如,GPIO_Mode_IN_FLOATING = 0x04,本来GPIO_Mode_IN_FLOATING的值是01。赋值之后变成0x04了?

追答

是的,如果 不赋值的话,它的值是1,赋值后以所赋的值为准

追问

例如
typedef enum GPIO_Speed_10MHz = 1,

GPIO_Speed_2MHz,

GPIO_Speed_50MHz GPiospeed_TypeDef;
意思是第一个值GPIO_Speed_10MHz是1,以后的递增GPIO_Speed_2MHz=2,这样吗?

追答

是的
记得采纳哟!

本回答被提问者采纳
参考技术B 枚举变量默认从0开始,以此递增。
但是可以手动赋值,之后其后以此递增.

C语言中num/=10是啥意思

那么k*=num%10 又是什么意思啊?

在C语言中/=是复合赋值运算符的一种,是两种运算(除、赋值)的结合,x/=10等同于x=x/10。

先进行左侧表达式除以右侧表达式的除法运算。然后进行把结果赋值给左侧表达式的赋值运算。这种运算符主要是为了简化表达式写法,当某个表达式要进行除法操作并且把除法结果赋值给自己的时候,可以用这种写法。

类似的其他运算符还有:

+=、 -=、 *=、 %=、 &=、 |=、 ^=、 <<=、 >>=其中等号左边的运算符分别是:加、减、乘、取余、按位与、按位或、按位异或、左移、右移。

扩展资料:

运算符号,比特右移(>>)运算符可以是算术(左端补最高有效位)或是逻辑(左端补 0)位移。例如,将 11100011 右移 3 比特,算术右移后成为 11111100,逻辑右移则为 00011100。因算术比特右移较适于处理带整数,所以几乎所有的编译器都是算术比特右移。

运算符的优先级从高到低大致是:单目运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符(=)和逗号运算符。

C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。

参考资料来源:百度百科-C语言

参考技术A 这个算是 c语言特有的运算命令吧 ,因为其书写方式的特殊。
x/=10 首先,x是变量,10是已赋值的变量或者常量;其次,x/=10 等价于 x=x/10 就是先把x原本的值和10的值进行除法运算后 ,在赋值给x。
比如有程序代码 : int x=10;
x/=10 ;
printf(“x=%d“,x);
经过上面的代码后,x的值就变成x=x/10 等于1了。
和这类型相似的形式还有很多比如+=,-=,*=,希望对你有帮助。
参考技术B

在C语言中 num /= 10 是一种简便的写法,其等价于 num = num / 10;

在C语言中这是一种普遍的写法,类似的有 num += 10 等价于 num = num + 10;可参见如下的程序:

#include<stdio.h>
#include<stdlib.h>

int main ()

    int num = 20;
    num /= 10;
    printf("num = %d\\n",num);
    //还原num的值
    num = 20;
    num = num / 10;
    printf("num = %d\\n",num);

    printf("\\n");

    //还原num的值
    num = 20;
    num += 10;
    printf("num = %d\\n",num);
    //还原num的值
    num = 20;
    num = num + 10;
    printf("num = %d\\n",num);

    return 0;

运行结果:
num = 2
num = 2

num = 30
num = 30

可以看到两次的运算结果是相同的。

参考技术C 就是num=num/10; 就是将num除以10,将得到的结果重新赋值给num。
表达式1/=表达式2 等价于 表达式1=表达式1/(表达式2)。.追问

那么k*=num%10 又是什么意思啊?

参考技术D 这个要看你有的c语言标准了
貌似有些标准是表示a=a+10
有些标准认为这个是错误的

现在大多数编译器应该是不允许这样的算式的,原因如下
假如出现一个类似的表达式
a=-10
那这个到底是表示a=a-10还是表示将-10赋值给变量a呢,因而存在二义性
正确的写法应该是
a-=10

以上是关于C语言中,对枚举值赋值是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

C语言枚举类型是啥意思?

C语言枚举定义函数,是啥意思?

c语言中num-1是啥意思

C语言这三个if括号里是啥意思

c语言赋值是啥?

C语言中的枚举类型