位运算

1、简介

     & :按位与,主要用于将某个数 清零 或 取某几位

      |  :按位或,常用来将某个数的某一位 设为 1

     ^  :按位异或,常用来做特定位的反转,或与 0 异或 从而保留原值

            例: 交换两数

                    int a=2 , b=3; 用异或交换两个数
     
                    a = a^b;  // 0010^0011 = 0001 (a=1)

                    b = a^b;  // 0001^0011 = 0010 (b=2)

                    a = a^b;  // 0001^0010 = 0011 (a=3)

     ~  :按位取反

     <<:按位左移,左移时不超出数据界限则,相当于 *2^n,左移后右端补0,

     >>:按位右移,左端补 0 or 1,视原数符号而定


2、不同长度数据位运算

     若进行位运算的两数长度不同,则运算时系统将二者按 右端对齐,左端补 0 or 1

3、3种编码方式

     原码:符号位 + 真值的绝对值

     反码:负数则在原码的基础上,符号位不变,其余各位取反

               正数的反码为其本身

     补码:负数则在反码的基础上+1 

               正数的补码为其本身

4、位段

     定义:以位为单位定义结构体(或联合体)中的成员变量所占空间

     格式:type [var] : digit

     注:type 只能为 int 、unsigned int 、signed int 三种类型

            var是位段名称,为可选参数,即可省略

             digit 是成员所占的二进制位数

例:
struct node
{
    unsigned int m: 4;     // 位段a,占4位
    unsigned int    : 0;     // 无名位段,占0位
    unsigned int n : 4;     // 位段b,占4位
    int a                :32;    // 位段c,占32位
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值