共用体与位运算

结构体补充:

后插

头删

尾删

共用体

有时需要使几种不同类型的变量存放到同一段内存单元中。例如,可把一个整型变量、一个字符型变量、一个实型变量放在同一个地址开始的内存单元中。以上3个变量在内存中占的字节数不同,但都从同一地址开始存放。几个变量互相覆盖,这种使几个不同的变量共占同一段内存的结构,称为“共用体”类型的结构。
定义共用体类型变量的一般形式为:

成员会占据相同内存空间。彼此之间相互覆盖,空间大小按最大的算,按照最大字节数对齐,成员地址值相同。

可用来判断大小端

枚举

如果一个变量只有几种可能的值,则可以定义为枚举类型。所谓“枚举”是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。

声明枚举类型用enum开头。例如:

enum weekday(sun,mon,tue,wed,thu,fri,sat};

声明了一个枚举类型enum weekday,可以用此类型来定义变量。

1.在C编译中,对枚举元素按常量处理,故称枚举常量。它们不是变量,不能对它们赋值。

2.枚举元素作为常量,它们是有值的,C语言编译按定义时的顺序使它们的值为0,1,2…在上面定义中,sun的值为0,mon的值为1……sat的值为6。如果将mon初始化为4,则mon=4,printf(“%d\n”,mon);输出结果为5;

typedef

除了可以直接使用C提供的标准类型名(如int、char、float、double、long 等)和自己声明的结构体、共用体、指针、枚举类型外,还可以用typedef声明新的类型名来代替已有的类型名。

如:

INT为类型名

为以前已有数据类型起的别名

结果为4

位运算

按位与:指定位清零

位运算要求操作数为整型或与整型相兼容的数(枚举也可以)

按位或

按位异或

两个比特位一样为0;不一样为1(指定位翻转)

同一个数字异或两次,还是数字本身

取反

为单目运算符

左移(最左边删除,右边补0)

右移:

无符号为逻辑右移(补0);

有符号为算术右移(i为正数补0,负数补1)

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
结构体、共用体位运算C语言中的重要概念。下面是对这些概念的介绍和演示: 1. 结构体(Structures): 结构体是一种用户自定义的数据类型,它可以包含多个不同类型的成员量。结构体的定义使用关键字`struct`,并且可以在其中定义多个员变量。结构体的成员变量可以是基本数据类型、数组、指针等。结构体的成员变量可以通过`.`运算符来访问。 ```c #include <stdio.h> // 定义一个结构体 struct Person { char name[20]; int age; }; int main() { // 创建一个结构体变量 struct Person person1; // 访问结构体的成员变量并赋值 strcpy(person1.name, "John"); person1.age = 25; // 输出结构体的成员变量 printf("Name: %s\n", person1.name); printf("Age: %d\n", person1.age); return 0; } ``` 2. 共用体(Unions): 共用体是一种特殊的数据类型,它允许在同一内存位置存储不同的数据类型。共用体的定义使用关键字`union`,并且可以在其中定义多个成员变量。共用体的成员变量共享同一块内存空间,因此修改其中一个成员变量会影响其他成员变量的值。共用体的成员变量可以通过`.`运算符来访问。 ```c #include <stdio.h> // 定义一个共用体 union Data { int i; float f; char str[20]; }; int main() { // 创建一个共用体变量 union Data data; // 赋值给共用体的不同成员变量 data.i = 10; printf("data.i: %d\n", data.i); data.f = 3.14; printf("data.f: %f\n", data.f); strcpy(data.str, "Hello"); printf("data.str: %s\n", data.str); // 输出共用体的不同成员变量 printf("data.i: %d\n", data.i); printf("data.f: %f\n", data.f); printf("data.str: %s\n", data.str); return 0; } ``` 3. 位运算(Bitwise Operations): 位运算是对二进制数进行操作的运算。常见的位运算操作符有与(`&`)、或(`|`)、异或(`^`)、取反(`~`)、左移(`<<`)和右移(`>>`)。位运算常用于对二进制数据的位进行操作,例如设置某一位的值、获取某一位的值等。 ```c #include <stdio.h> int main() { unsigned int a = 60; // 二进制表示为 0011 1100 unsigned int b = 13; // 二进制表示为 0000 1101 int result = 0; // 位与运算 result = a & b; // 二进制表示为 0000 1100 printf("a & b = %d\n", result); // 位或运算 result = a | b; // 二进制表示为 0011 1101 printf("a | b = %d\n", result); // 位异或运算 result = a ^ b; // 二进制表示为 0011 0001 printf("a ^ b = %d\n", result); // 位取反运算 result = ~a; // 二进制表示为 1100 0011 printf("~a = %d\n", result); // 左移运算 result = a << 2; // 二进制表示为 1111 0000 printf("a << 2 = %d\n", result); // 右移运算 result = a >> 2; // 二进制表示为 0000 1111 printf("a >> 2 = %d\n", result); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值