C语言中的位运算
2016-04-06 21:48
302 查看
位运算
左移、右移 << >> 左移右补0,右移左补0;取反 ~
异或 ^ ----相同为0,不同为1
位与 & ---------同1为1,同0为0,不同为0,(用于取位操作)
位或 || -------------同0,为0,,有1则1(置某位为1)
所有的位操作都是基于无符号类型的数据;[工作和笔试中没有负数,不需要按照补码或者是反码来求]
注意:
位操作也不是对变量的值直接操作啊,也就是说它是取a的值出来,算得上是a的一个备份,对备份进行操作;
a++是对值得直接操作,a=a+1;所以该变了变量的值;
对位的操作不改变原来的值;
#include <stdio.h>
unsigned int quwei(unsigned int u,unsigned int wei);
int main()
{
unsigned char a=7;//00000111
//左移和右移的操作; 左移右补零,右移左补零;
printf("%u\n",a<<2);//28--11100
printf("%u\n",a<<1);//14--1110
printf("%d\n",a>>2);//1-- 1
printf("%u\n",a>>7);//0 0
printf("%d\n",a<<7);//896 11 1000 0000
//取反操作;
printf("%u\n",(unsigned char)~a);//11111000 按位0--1 1--0;
//异或运算;
printf("%d\n",a^8);//15 按位异或运算,在同一位上,相同为,不同为;
//与运算;
printf("%d\n",a&7);//7 按位与运算,全为则为.不同的为;
//或运算;
printf("%d\n",a | 7);// 7 按位或运算,全为零则为,否则为;
printf("%d\n",quwei(2345,12));
return 0;
}
unsigned int quwei(unsigned int u,unsigned int wei )
{
return (u >> (wei-1)) & 1; //取某一位的值;
}
相关文章推荐
- 华为C++/MFC面试题
- c++中读入逗号分隔的一组数据
- const的引用
- C++ 常用头文件
- c语言 中的一道经典面试题
- C语言中自己写几个简单的库函数
- 修炼成C++高手必看的C++书单
- c++ lesson 一(命名空间输入输出)
- C++顺序性容器、关联性容器与容器适配器
- C++第3次实验-项目一
- C++ 二维动态数组创建及越界问题
- 鬼话连篇(二)——简单工厂模式(C++/C#)
- C++_智能指针
- C++生成DLL导出函数的小demo
- 一个简单的C语言的汇编程序
- C++走向远洋——32(项目一内全部成员函数)
- C语言问卷
- C++走向远洋——31(六周,项目一,1.1)
- 基于C++11的事件驱动框架
- c++primer(第五版) 第十四章 重载运算与类型转换习题答案