1,数值在计算机中的表示
位[bit],位:是指二进制中的位,是计算机能处理的最小单元. 字节[byte],字节:计算机处理的基本单位,计算机的内存是按字节分配存储空间的,一个字节由8位二进制数组成,C中数据类型都是以字节为基本单元. 补码:整数补码是此本身,负数补码是其绝对值按位取反取反再加1; 计算机是以补码的形式存放数值的.
2,位运算符
位运算概念: 以二进制位为单位的运算,位运算仅用于整数[整型数,字符型]
位运算符: 位逻辑运算符: &->位于,|->位或,~->位非,^->位取反. 位移位运算符: <<->左移,>>->右移.
3,位逻辑运算符-运算规则
[按位求反~]~1=0,~0=1;取反->1的反为0,0的反为1; [按位与&]0&0=0,0&1=0,1&0=0,1&1=1;对应位均为1时才为1,否则为0; 【按位或|】0|1=1,0|0=0,1|0=1,1|1=1;对应位均为0时才为0,否则为1; [按位异或]0^1=1,0^0=0,1^0=1,1^1=0;对应位不同, 按位或:对应位均为1时才为1,否则为0; 按位与:对应位均为0时才为0,否则为1; 按位异或:对应位相同时为0,否则为1;
4,位位移运算
x<<位移位数;向左位移几位;
x>>箭头向那就是向那边移动;
5,位运算操作注意项
参与为运算的操作数均应是整型数或是字符型数据,进行运算的时候先将各种进制转换成二进制再进行按位相关操作.
6,2个类型长度不同的数进行位运算,则需要进行补位;
不同类型长度的数右端对齐,左端补位,整数与无符号整型数左补0,负数补1;
练习
设计函数,给出一个数的原码,得出该数的补码; 根据补码定义,正数补码与原码相同,负数的补码等于绝对值按位取反[即反码]+1;
位段数据类型;
有时候存储一个信息数据不必占一个字节空间,只需一个或多个二进制位就够用,
要是强制使用int等成型的数据类型,务必造成内存空间浪费,介于此C语言引入了位段类型概念;
位段概念是一种特殊的结构类型,其所有成员均以二进制位为单位定义长度,
列如:CPU的状态寄存器,按位段定义如下:
struct status { unsigned sign: 1; //符号标志 unsigned zero: 1; //零标志 unsigned carry: 1; //进位标志 unsigned parity: 1; //奇偶溢出标志 unsigned half_carry: 1; //半进位标志 unsigned negative: 1; //减标志 } flags;//定义结构体变量的同时定义一个结构体变量为flags;