位运算

来源:互联网 发布:windows引导修复工具 编辑:程序博客网 时间:2024/06/07 03:02
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位
};
0 0
原创粉丝点击