欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

位运算(c语言)

程序员文章站 2022-07-15 08:52:29
...

        一.位运算有 ~(取反),<<(左移),>>(右移),&(按位与),^(按位异或),|(按位或),优先级从取反开始,其中左右移有算数左右移和逻辑左右移。算数左右移空位补0,逻辑左右移空位补1。

      位运算可以用于判断一个数某位为0还是1比如

   

#include "stdio.h"
void main()
{
   char cCode; 
   scanf("%c",&cCode);
   cCode=cCode&0xf0;/*取该数二进制前4位*/
   printf("%x \n".cCode);
   getch();

}

这个程序利用了按位与,取得一个数的前4位。

判断键盘输入的运用:

#include <stdio.h>
#include <stdlib.h>
#include <bios.h> /*包含了bioskey这个老函数*/
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
	while(1) {
		int temp=bioskey(1);/*直接取得键盘的输入,只在dos下有效,所以一般编译器没有包含*/ 
		int iHigh=temp>>8;/*按位向右移八位取得高八位*/ 
		int iLow=temp&0x00ff;/*按位高位与0,取得低八位*/
		if(iLow=27) {/*27为esc的编码*/
			break;
		} else if(iLow=0) {/*低八位为0*/ 
          printf("按下键的是功能键和组合键%d",iHigh);/*输出代表的是功能键编码*/ 
		} else {
            printf("按下键的是功能键%d",iLow);/*输出代表的是键盘ascll码*/
		}



	}



	return 0;
}

二.位段

      一个int类型一般为2-4字节,而如果用来储存一个日期的话就浪费了很多,所以c语言提供了位段的用法,就是把一个字节用来储存多个数据,用struct来定义位段结构,下面这个程序用这个方法储存一个日期

#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {

    struct date_struct{
    	unsigned int day:5;
    	unsigned int month:4;
    	unsigned int year:14;
    	
	}; 
	struct date_struct stDate_byte;/*定义date_struct类型的变量*/ 
	 stDate_byte.day=12;
	 stDate_byte.month=6;
	 stDate_byte.year=2008;
	 
    printf("%d,%d,%d",stDate_byte.day,stDate_byte.month,stDate_byte.year);
    


	return 0;
}

位段还可以在中间定义无名位段  struct date_struct{
        unsigned int day:5;
        unsigned int month:4;

        unsigned int :4;
        unsigned int year:14;
        
    }; 

那么中间就会空开,还可以定义为零的无名位段,这样第二位段就会从别除开始储存。

一个位段不能跨两个储存单元,如果一个单元不够就从下一单元开始,定义的位段不能大于储存单元。

 

 

上一篇: C语言位运算

下一篇: C语言 位运算