打印
[技术问答]

强制转换、enum枚举

[复制链接]
58|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
geraldbetty|  楼主 | 2024-12-16 12:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、强制转换
        C语言中,不同的变量类型是不能直接赋值的,但是C语言中可以强制转换变量的类型,其用法如下:
int a=1;double b=2.1;a=(int)b;
        变量a是 int 类型,变量 b 是double浮点类型,直接相互赋值是不可以的,所以在变量b前面加一个括号,括号里写需要强制转换的类型。如上 (int)b 结果就是把 b 变量的值转换为 int 类型的值,当然 b 变量本身值还是2.1没有改变,强制转换是把 b 变量进行了计算得出一个新的结果,a=(int)b 是把 b 变量计算出的结果赋值给了 a 变量。那么 a 变量是多少呢?其值等于2,因为在浮点转整形强制转换的过程中,C语言规则是直接去掉小数位,只留下整数位。强制转换有两种,一种是向上强转,一种是向下强转。
        向上强转意思就是低字节变量转换为高字节变量,比如一个字节变量转换为两个字节变量,那么多出来的一个字节自动用0填充,比如:
int a;char b;a = (int)b;
        b变量的二进制本来是一字节 0000 0000,但是被强制转换为 int 后变为两字节0000 0000 0000 0000。
        向下强转意思就是高字节变量转换为低字节变量,比如两字节变量转换为一字节变量,则多出来的高位字节自动去掉,如变量 1110 1111 1000 0001,强制转换为一字节变量后等于 1000 0001,其最高位的一个字节被去掉了。
2、enum枚举
        假如我们需要定义星期一到星期日的日期变量我们可以用 #define 宏定义,如下:
#define MON  1#define TUE  2#define WED  3#define THU  4#define FRI  5#define SAT  6#define SUN  7
        但是这样的话代码量过于重复,这时我们可以定义enum枚举变量来解决这个问题,其定义方式如下:
enum DAY{      MON=1, TUE, WED, THU, FRI, SAT, SUN};
        这样代码是否简洁许多?枚举变量中间是由","逗号隔开,每个变量依次往后加1,如上,TUE等于2,WED等于3。当然我们也可以在中间自定义大小,如下:
enum DAY{      MON=1, TUE, WED=5, THU, FRI, SAT, SUN};
        这样的话,TUE还是等于2,WED就变成等于5,THU变成等于6了。
        我们还可以定义枚举变量,这个变量的赋值范围只能是枚举中存在的值,如下:
enum DAY day1;day1 = MON;day1 = (enum DAY)2;
        这样定义了一个枚举变量 day1,以下可以用枚举里面的数进行赋值,当不是枚举类型的值赋值给枚举变量时需要强制转换,当然这个值要在枚举中存在,不然还是会报错误的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

1358

帖子

0

粉丝