枚举类型enum、typede、位运算

目录

enum

typedef 

位运算

&与运算

|或运算

~取反

^异或

<<左移

>>右移

enum

枚举:一个一个列举出来

是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围

作用:提高代码可读性、安全性

枚举类型

enum 枚举名 

{

        列举各种值//枚举元素(枚举常量)

};

表示定义了一种枚举类型

注意:

  • 列举的各种值之间逗号隔开,不需要写类型名

枚举元素大写以便于和其他变量区分

  • 枚举中逐个列举的值默认从0开始

如果有给定的值,则后续没有给值的枚举成员值依次+1

  • 枚举类型的 本质实际上是一个int类型的数据
  • 枚举类型的变量与整型类型的变量通用
  • 与宏定义的对比

使用阶段不一样:

宏定义——预处理阶段

枚举——编译阶段要检查语法、运行阶段参与代码运行

可读性:

都提高了可读性,枚举更能说明有相关性的一些值的关系

typedef 

type define 本意不是定义类型,给类型起别名

int a;定义一个int型变量a

type int a;此时a是int类型的一个别名

struct stu

{};

struct stu s;

typedef struct stu stu_t;

stu_t s1;

原始方式struct stu s; 需要显式地写出 struct 关键字。

使用 typedef 别名后的方式stu_t s1; 可以直接使用 stu_t 来定义变量,无需再写 struct

这种使用 typedef 创建别名的方式,特别适用于定义结构体、联合体以及指针类型,使代码更简洁、更易读。尤其是在定义复杂的结构体或指针类型时,typedef 可以极大地简化代码书写

位运算

C语言特点

可以直接操作二进制位

&与运算

(区别&&逻辑与运算)

运算规则:一假则假

清0

0xaa&0x33

        1010 1010

 &     0011 0011

————————

        0010 0010        0x22

|或运算

运算规则:一真则真

复1

0xaa|0x33

        1010 1010

 |      0011 0011

————————

        1011 1011        0xbb

~取反

规则:真假相对

~0xaa

~1010 1010

——————

0101 0101        0x55

^异或

运算规则:相同为0,不同为1

加密、两个数交换

0xaa^0x33

        1010 1010

 ^      0011 0011

————————

        1001 1001        0x99

0x99^0x33 = 0xaa

两个数交换

a = a^b;

b = a^b;

a = a^b;

注意:

浮点数不能做位运算

<<左移

a<<n表示将a这个数据左移n位

左移1位相当于乘2,n位就是乘2的n次方

注意:最低位补0

假设a = 3,其二进制表示为00000011

  • a << 1:左移1位后变为00000110,对应的十进制值为6。这相当于3 * 2 = 6
  • a << 2:左移2位后变为00001100,对应的十进制值为12。这相当于3 * 4 = 12

>>右移

a<<n表示将a这个数据左移n位

左移1位相当于除2,n位就是除2的n次方

右移看符号位、看数据类型

右移操作有两种主要类型:算术右移和逻辑右移

算术右移(针对有符号数)

如果是有符号类型的数据右移时,最高位补符号位

  • 符号位:算术右移时,保留了数值的符号(即正负)。最高位会补符号位,这意味着如果数值是负数,最高位补1;如果是正数,最高位补0

  • 适用:适用于有符号整数的数据类型。

如果a = -4

(32位有符号整数,二进制表示为11111111 11111111 11111111 11111100),

执行a >> 1,右移1位后,

结果是11111111 11111111 11111111 11111110,对应的十进制值为-2

逻辑右移(针对无符号数)

如果是无符号类型的数据右移时,最高位补0

  • 符号位:逻辑右移时,不保留符号位的特性,最高位始终补0

  • 适用:适用于无符号整数的数据类型。

如果a = 4

(32位无符号整数,二进制表示为00000000 00000000 00000000 00000100),

执行a >> 1,右移1位后,

结果是00000000 00000000 00000000 00000010,对应的十进制值为2

  • 14
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值