C/C++ 的位操作

转载 2011年01月22日 20:06:00

一、位的概念


在计算机中,一字节占8位(现在的某些电脑也有占16位的),也即00000000-11111111。位就是里面的0和1。 
char c=100; 实际上c应该是01100100,正好是0x64。其中高位在前,低位在后。在某些计算机上面点大在后存储为0x46

 

二、位运算符:

&与,|或,~非,^异或,<<左移,>>右移 
&=自身与、|=自身或、~=自身非、^=自身异或 
例如: 
b=a<<3; 就是a的值左移两位并赋值为b。a本身的值并没有改变。等价于b=a*8; 
int num; 
if (num & 1 == 1); // 判断最后一位是否是1 
num >>= 1; 
num = num >> 1;    // num右移1位

 

三、常见操作

给num的第5位(最小是第0位)置1、或置0、或判断是否为1

1.第一种操作 
num |= (1<<5);  //给num第5位置1;因为跟1或=1;跟0或=不变 
num &= ~(1<<5); //给num第5位置0;因为跟0与=0;跟1与=不变 
num ^= (1<<5);  //给num第5位取反;因为跟1异或=1,跟0异或=不变 
num & (1<<5)    //=0表示第5位是0;!=0表示第五位是1 
num >> 5 & 1    //得到num第5位;

#define bit_set(num, pos) (num |= (1<<pos))  //给num第pos位置1
#define bit_clr(num, pos) (num &= !(1<<pos)) //给num第pos位置0
#define bit_rev(num, pos) (num ^= (1<<pos)) //给num第pos位取反
#define bit_que(num, pos) (num & (1<<pos)) //判断num的第pos是否为0;!=0就是1
#define bit_get(num, pos) (num >> pos & 1) //获得num的第pos位

C/C++位操作简介

之前一直对C/C++里面的位操作不是太理解,遇到可能要用的地方也想尽办法用其他fa...
  • u010386433
  • u010386433
  • 2014年07月22日 15:23
  • 1229

指针,比特位操作

为了找工作,最近在看《程序员面试宝典》第四版,发现之前学习C++都是太肤浅了。原来比特位操作还可以很灵活的运用哈... 1.用一个表达式判断一个数X是不是2的N次方(N为整数),不可用循环语...
  • tianzhaixing
  • tianzhaixing
  • 2014年03月08日 20:28
  • 1498

C/C++中的位运算(上)

本文转载自点击打开链接 C/C++中的位运算及其实例(1) 摘要 位运算是C/C++中的基本运算之一,即便是这样,它对大多数程序员来说是一个比较陌生的运算——大多数程序员很少使用位运算。本篇先...
  • qq_32400847
  • qq_32400847
  • 2016年03月07日 20:01
  • 1593

C++ 中的位操作

定义二进制变量: 一般是以八进制或者十六进制来定义,八进制数以0开头,十六进制数以0x开头 例如int  a = 0x80, 这里的80只能表示8个二进制位,它表示的是int的低8位,前面的24个...
  • u011135902
  • u011135902
  • 2016年10月13日 19:11
  • 1212

C语言位操作的神应用(位操作)

不少代码通过位操作,解题很巧妙,学习语言,就要学其精髓,学其底层,不可蜻蜓点水 例一: 函数getbits(x,p,n),返回x中从右边数第p位开始向右数n位的字段 unsigned getbi...
  • ccDLlyy
  • ccDLlyy
  • 2016年08月10日 10:30
  • 1585

C++:位操作基础篇之位操作全面总结

位操作篇共分为基础篇和提高篇,基础篇主要对位操作进行全面总结,帮助大家梳理知识。提高篇则针对各大IT公司如微软、腾讯、百度、360等公司的笔试面试题作详细的解答,使大家能熟练应对在笔试面试中位操作题目...
  • liyjupc
  • liyjupc
  • 2016年09月27日 11:58
  • 932

单片机的C语言中位操作用法

在对单处机进行编程的过程中,对位的操作是经常遇到的。C51对位的操控能力是非常强大的。从这一点上,就可以看出C不光具有高级语言的灵活性,又有低级语言贴近硬件的特点。这也是在各个领域中都可以看到C的重要...
  • king110108
  • king110108
  • 2015年04月24日 22:46
  • 648

位运算之 C 与或非异或

位运算比较易混: 位运算之 C 与或非异或   与运算:& 两者都为1为1,否则为0 1&1=1,  1&0=0,  0&1=0,  0&0=0 或运算:| 两...
  • lxw907304340
  • lxw907304340
  • 2015年03月15日 23:06
  • 4621

C/C++中的有符号和无符号的位运算问题

是对C/C++下面的结果感到困惑? printf("%d\n", ((unsigned char)~0 >> 1)); //结果为127 printf("%d\n", -((unsigned ch...
  • havesnag
  • havesnag
  • 2016年08月12日 13:45
  • 1631

C语言之内存和位操作

内存和程序运行 程序运行的目的是为了得到特定的结果,计算机本质上是用于计算的,既然是用于计算,就需要参与计算的数据,那这些数据就存储在内存中,计算之前参与运算的数据以及运算之后得到的数据,都存储在内...
  • u012741741
  • u012741741
  • 2016年11月20日 18:12
  • 1423
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C/C++ 的位操作
举报原因:
原因补充:

(最多只允许输入30个字)