精易论坛

标题: 编程之道之位运算 [打印本页]

作者: lg173    时间: 2010-2-1 13:45
标题: 编程之道之位运算
为了更为直观,本文以易语言为例,vc++为辅。
首先了解一下位运算的几个命令(以下备用):
易语言                            vc++
位或 (, )      |位与 (, )      &位取反 ()      ~ 位异或 (, )     ^右移 (, )      >>左移 (, )      <<
合并整数 (, )    合并短整数 (, )

好,现在开始说说什么是位运算:
我们都知道程序中的所有数在计算机内存中都是以二进制的形式储存的(不明白可以参见
<计算机中的信息表达之数制>),计算机位运算就是以“二进制位”为基础进行逐位运算。
废话不多说,实例开始:
  
左移:
vc++方式:a<<=1;
如将 b移x位结果为y表示为:   y=2^x*b(^符号代表乘方)
反之右移为:y=b÷2^x
注意:公式是自己总结的,没有进行严格检查.
如果右移出来得小数,那就直接取整得0
位取反()
这个不用说吧,0变成1,1变成0
如:0101101110  位取反就是  1010010001
注意:是二进制哦
位与和位或
简易记法:
位与(1,1)=1,位与(1,0)=0,位与(0,0)=0,规则为“有0则0”;位或(1,1)=1,位或(1,0)=1,位或(0,0)=0,规则为“有1则1”;
详细的再这就说一下:
首先明确什么是 补码、反码和原码(本空间有介绍)
然后按照 10进制数的 原码进行简易记法中的计算(好像后面有介绍)
位异或
  
位异或(1,1)=0,位异或(1,0)=1,位异或(0,0)=0,位异或(0,1)=1,规则为“同0异1”;
  
好,出示几个例子:
vc++例子:
#include "iostream.h"
void main(){ int a=2;   //定义一个整型变量 a并赋值为2 a^=0;      //对a进行位异或运算 cout<<a<<endl;   //输出一个运算结果a,其值为2,过程如下:
/* 2的补码为10    0还是0(前面的一大堆我省略了)
  按照位异或的原理:同0异1
  形式如下:
  10^00= 10(注意:10是二进制的哦)
  而二进制的10就等于十进制的2
  所以输出的值是2*/
/*如果说上面的还没看懂,就看看这种表现形式:
  十进制   二进制     备注
  2    1 0      便于理解,都取两位
  0    0 0      前面一堆全去掉了
      ↓ ↓      ---------→位运算开始
      1   0      同0,异1(竖排看)
  2    }
  
那么这里输出的数值就是2
好了有关位运算的事 就说到这里吧^
如果回帖多的话就考虑 扩充写内容,完善一下,少就这样吧,看到就是得到了,没看到就拉倒吧
  
都看到这里了,不留言可太不厚道了啊~
作者: 级别低手    时间: 2011-11-15 22:21
{:3_232:}{:3_232:}{:3_232:}{:3_232:}iI I 不懂
作者: 级别低手    时间: 2011-11-19 10:34
我学这么复杂,你说,我能发财吗
作者: itfkfm    时间: 2011-11-19 11:22
看不懂!!!!!!!!!




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4