码迷,mamicode.com
首页 > 编程语言 > 详细

C语言学习点滴(四)

时间:2015-08-10 15:00:09      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

位运算表示按二进制进行的运算。

位运算首先理解二进制。二进制是指数字的每一位都是0或者1

位运算操作符<<(右移运算符) \ >>(左移运算符) 

与(&)   0 & 0 = 0    1 & 0 = 0       0 & 1 = 0     1 & 1 = 1

或(|)      0 | 0 = 0      1 | 0 = 1        0 | 1 = 1        1 | 1 = 1

异或(^) 0 ^ 0 = 0     1 ^ 0 = 1       0 ^ 1 = 1      1 ^ 1 = 0

  1. 位移运算符

    位左移

    左移运算的实质是将对应的数据的二进制值逐位左移若干位,并在空出的位置上填0,最高位溢出并舍弃

例:
int a,b;
a = 5;
b =a<<2;       //a向左移动2位  
// a的二进制  00000101   向左移动2位就是  00010100 即b=20;

大家也许在这里会觉得很难计算,我说个我看到过的一个计算方法

二进制中左边多一位表示2的1次方 多2位表示2次方,依次计算

如果往左边移动几位那就乘以多少个2就行了

int a=85,b;
b=a<<3;
//a的二进制是 00000000 01010101  往左移动三位 00000101 01010000
这里b的值 = 85×2×2×2  = 680
大家可以用计算机算一下

2.右移运算符

  这里同左移运算符相反,是将对应的数据的二进制值逐位右移若干位,并在空出的位置上填0,最高位补0

例:
int a, b;
a=5;
b=a>>2;
 //a向左移动2位  00000101     00000001
//则b=1

我们也可以用上面的方法来计算只不过只是除法


//当最高位是1,则根据计算机的系统,处理方式不一

复合运算

运算符 含义 描述
& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1
^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1
~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
1、“按位与”运算符(&)

   是指参加运算的的俩两个数据,按照二进制进行“与”运算,如果两个相应的二进制都位1,则该位的结果为1.否则为0

按位与运算 例:
 00000011(3)
&00000101 (5)
 00000001 (1)
 
 由此得知3&5=1
 
 我们可以用位与对存储单元清0
 #include <stdio.h>
 int main()
 {
     int a=5;
     a &= 0x00;
     return 0;
 }

按位或”运算符(|)
两个相应的二进制位中只要有一个为1,该位的结果值为1。借用逻辑学中或运算的话来说就是,一真为真


异或”运算符(^)
他的规则是:若参加运算的两个二进制位值相同则为0,否则为1

应用:
(1)使特定位翻转
设有数01111010(2),想使其低4位翻转,即1变0,0变1.可以将其与00001111(2)进行“异或”运算,

即:
 01111010
^00001111
 01110101
运算结果的低4位正好是原数低4位的翻转。可见,要使哪几位翻转就将与其进行∧运算的该几位置为1

即可。
(2) 交换两个值,不用临时变量
例如:a=3,即11(2);b=4,即100(2)。
想将a和b的值互换,可以用以下赋值语句实现:
    a=a∧b;
    b=b∧a;
    a=a∧b;
a=011(2)
    (∧)b=100(2)
a=111(2)(a∧b的结果,a已变成7)
    (∧)b=100(2)
b=011(2)(b∧a的结果,b已变成3)
    (∧)a=111(2)


a=100(2)(a∧b的结果,a已变成4)


4、“取反”运算符(~)
他是一元运算符,用于求整数的二进制反码,即分别将操作数各二进制位上的1变为0,0变为1。

C语言学习点滴(四)

标签:

原文地址:http://my.oschina.net/u/2421636/blog/490154

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!