首页 > 其他分享 >枚举类型enum、typede、位运算

枚举类型enum、typede、位运算

时间:2024-08-11 19:51:55浏览次数:10  
标签:右移 运算 符号 enum stu 枚举 typede 1010

目录

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

标签:右移,运算,符号,enum,stu,枚举,typede,1010
From: https://blog.csdn.net/weixin_62409078/article/details/141087600

相关文章

  • 单例模式-饿汉、懒汉(线程安全、双重检查锁定)、静态内部类、枚举
    1饿汉式这种方式是最简单的单例模式实现,它在类加载的时候就创建了单例对象。优点实现简单线程安全缺点无论是否使用,都会加载单例类并创建单例对象publicclassSingleton{privatestaticfinalSingletonINSTANCE=newSingleton();privateSingleton(){......
  • JAVA中的枚举类
    Java中的枚举类型(Enum)在Java中,枚举(Enum)是一种特殊的类,它用于表示一组固定的常量。枚举类型在Java5(JDK1.5)中被引入,提供了一种类型安全的替代方案,用于替代传统的整型常量(如`int`类型的常量)和字符串常量(`String`)来表示一组固定的值。枚举类型具有以下特点:1.类型安全:枚举类型......
  • 枚举、typedef、位运算、堆内存-malloc 函数
    目录枚举定义枚举值枚举类型枚举的优点枚举的注意事项示例程序总结typedef基本用法复杂数据类型的重命名位运算位移操作总结堆内存malloc 函数free 函数常见问题枚举定义在C语言中,枚举(enum)是一种数据类型,它允许定义一组具名的常量。使用枚举可以使代码......
  • springboot自定义枚举转换器
    在Spring框架中,枚举类型的转换可以通过自定义的转换器来实现,这样可以方便地在请求参数、表单数据、以及数据库查询中使用枚举类型。下面是关于Spring枚举转换器的详细介绍和使用方法:以排序枚举为例1.定义枚举类BaseEnum.javapackagecom.echo.model.enums;publicinterfa......
  • 阿斯蒂芬小技巧——枚举子集时间复杂度证明
    在写状压dp时,经常会见到如下句子:for(inti=0;i<(1<<n);i++){ for(intj=i;j!=0;j=(j-1)&i){ }}时间复杂度证明如下:单个\(x\)枚举子集复杂度易证(设\(y=log_2(x)\)):\[∑_{i=0}^{y}C^i_y\]使用二项式定理:\[(a+1)^n=∑_{i=0}^{n}C_n^i~a^i\]将上面的\(a\)......
  • CF908E New Year and Entity Enumeration 题解
    CF908E给定\(m\),令\(M=2^m-1\)。给定\(\{0,1,\cdots,M\}\)的大小为\(n\)的子集\(T\),定义集合\(T\subseteqS\subseteq\{0,1,\cdots,M\}\)是好的当且仅当:\(a\inS\Rightarrowa\oplusM\inS\)\(a,b\inS\Rightarrowa\and\b\inS......
  • Java enum(枚举)
    在Java中,enum(枚举)是一种特殊的数据类型,允许你定义一组命名的常量。这些常量通常代表一个固定的、有限的集合。例如,一年中的季节、交通信号灯的状态,或者一副扑克牌的花色。基本用法一个基本的enum定义如下:publicenumSeason{WINTER,SPRING,SUMMER,FALL}这里,Season......
  • Swift 优雅的 Enum
    声名EnumenumColor{staticfuncRGB(r:CGFloat,g:CGFloat,b:CGFloat)->UIColor?{UIColor(red:r/255.0,green:g/255.0,blue:b/255.0,alpha:1)}staticfuncRGBA(r:CGFloat,g:CGFloat,b:CGFloat,a:CGFloat)->UIColor?......
  • 枚举的使用场景
    枚举的使用场景目录枚举的使用场景基本定义带属性的枚举使用枚举枚举方法枚举与switch语句枚举迭代枚举与Java反射枚举实现接口枚举序列化基本定义publicenumDay{SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY;}带属性的枚举枚举可以拥有字段、......
  • `EnumSet` 和 `EnumMap` 枚举类
    EnumSet和EnumMap枚举类目录EnumSet和EnumMap枚举类EnumSet创建EnumSetEnumSet操作EnumMap创建EnumMapEnumMap操作EnumSetEnumSet是基于位向量(bitvector)的集合实现,专为枚举类型设计,提供了非常高效的内存和性能表现。EnumSet不允许包含null元素,并且所有元素都必......