C - 基础 - 位操作

二进制、位、字节

  • 一个字节包括8个位。C术语字节表示存放系统字符集大小,C字节可能8、9、16或其他。
  • 有符号整数表示由硬件决定,1+7表示方法范围-127+127,有+0和-0。采用二进制补码,-127128。
  • 浮点数表示法,二进制小数+二进制指数

位逻辑运算符

#include <stdio.h>

int main(int argc, char *argv[])
{
	unsigned char c = 2; // 0000 0010
	unsigned char vc = ~c; // 1111 1101
	printf("位运算符,%d 按位取反 : %d \n", c, vc);

	unsigned char d = 1;// 0000 0001
	vc = c & d; // 0000 0000
	printf("位运算符,%d 按位与 %d : %d \n", c, d, vc);	// 用作掩码、查看一位的值

	vc = c | d; // 0000 0011
	printf("位运算符,%d 按位或 %d : %d \n", c, d, vc); // 用作打开位、关闭位

	d = 3;		// 0000 0011
	vc = c ^ d; // 0000 0001
	printf("位运算符,%d 按位异或 %d : %d \n", c, d, vc); // 用作转置位

	vc = c << 2; // 0000 1000  , 8
	printf("位运算符,%d 左移 %d : %d \n", c, 2, vc);	// 用法: 高效2的次幂 乘除法

	vc = c >> 2; // 0000 0000  , 0
	printf("位运算符,%d 右移 %d : %d \n", c, 2, vc);

	return 0;
}

位字段

#include <stdio.h>
struct {		// 位字段
	unsigned int autfd : 1;  // 1位字段
	unsigned int bldfc : 1;
}prnt;
int main(int argc, char *argv[])
{
	prnt.autfd = 0;
	prnt.bldfc = 1;
	// 可以指定位字段的位数,实例化时小心超出容量哦
	// 费劲心机省内存,我还是写Java去吧
	return 0;
}

posted @ 2017-05-13 13:42  张狂莫怪  Views(138)  Comments(0Edit  收藏  举报