Linux学习-共用体和枚举,位运算

目录

共用体

​编辑枚举

位运算


共用体

定义和访问都和结构体类似;区别在于共用体所有的成员变量共享同一片空间,内存空间就是其最大数据类型所占内存的大小;

如果给成员变量2的值,那么成员变量1的值就会被覆盖;主要适用于传参;

关键词:

union  共用体名

{

        数据类型1  成员变量1;

         数据类型2  成员变量2;

         数据类型3  成员变量3;

        ...........

};

重点使用:判断硬件存储方式是大端还是小端,如下图二

内存小端:内存低地址存低数据位

                  内存高地址存高数据位

内存大端:内存低地址存高数据位

                  内存高地址存低数据位

通过将int *型首地址强制转换为char *从而打印出第一个地址从而判断其是大端还是小端,强制转化地址指针其存储内容不会改变

通过union判断大小端程序及图解如下通过共用体特性的判断

枚举

enum 枚举类型名

{

        枚举常量1,

        枚举常量2,

        枚举常量3

        .....

};

1,枚举一般说明将来变量的值在给定的常量中选择其一作为他的值

2,枚举常量可以被赋值,下一个常量的值就是这个常量的加1,第一个默认为0

3,枚举常量默认为int类型,可以直接在程序中使用

举例:

该举例中用int *的作用是:

当使用 scanf 函数从标准输入中读取数据时,它需要知道数据将被存储在内存的哪个位置。scanf 函数通过传递参数的内存地址来实现这一目的。

在C语言中,变量是存储在内存中的,每个变量都有一个地址。& 运算符用于获取变量的地址。例如,如果有一个整数变量 num&num 将给出 num 变量的地址。

但是,scanf 函数的参数必须是指向要存储数据的内存位置的指针,即某个数据类型的指针。例如,如果要读取一个整数值,scanf 需要一个 int* 类型的指针作为参数。

然而,在的代码中,s 是一个枚举类型的变量,而不是一个指针。因此,为了使 scanf 函数正常工作,需要使用 & 运算符获取 s 变量的地址,并将它强制转换为 int* 类型的指针。这样做可以将 s 变量的地址传递给 scanf 函数,让它知道在哪里存储输入的数据。

位运算

&按位与         与0得0;

| 按位或         或1置1;

^按位异或        相同为0,相异为1

~按位取反        每位取反

>>右移                右移n位,等价于让该数/2^n

<<左移                左移n位,等价于让该数*2^n

位运算在数据交换中的运用代码及其图解如下:

将变量得第n位置0或者是置1(单片机中常用)

置0: num = num & ~(1<<n);

置1:num = num | (1<<n);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值