首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于C语言中的按位与(&)按位或(|)按位异或(^)取反(~)的疑惑!解决思路

2012-04-02 
关于C语言中的按位与(&)按位或(|)按位异或(^)取反(~)的疑惑!大家好!我本身是一个软件测试,现在转到了开发

关于C语言中的按位与(&)按位或(|)按位异或(^)取反(~)的疑惑!
大家好!我本身是一个软件测试,现在转到了开发组,学习C语言
在学到C语言中按位运算时候遇到了疑惑,对按位与(&)按位或(|)按位异或(^)取反(~) 这几个不容易理解,
希望各位朋友能帮助我,形象的帮我解释按位运算和按位运算符,谢谢

[解决办法]
=== 1. and(&)运算 ===
  and运算通常用于二进制取位操作,例如一个数 and 1的结果就是取二进制的最末位。这可以用来判断一个整数的奇偶,二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数.
  相同位的两个数字都为1,则为1;若有一个不为1,则为0。
  00111
  11100
  (&或者and)
  ----------------
  00100
=== 2. or(|)运算 ===
  or运算通常用于二进制特定位上的无条件赋值,例如一个数or 1的结果就是把二进制最末位强行变成1。如果需要把二进制最末位变成0,对这个数or 1之后再减一就可以了,其实际意义就是把这个数强行变成最接近的偶数。
  相同位只要一个为1即为1。
  00111
  11100
  (|或者or)
  ----------------
  11111
=== 3. xor(^)运算 ===
  异或的符号是⊕。
  xor运算通常用于对二进制的特定一位进行取反操作,因为异或可以这样定义:0和1异或0都不变,异或1则取反。
  xor运算的逆运算是它本身,也就是说两次异或同一个数最后结果不变,即(a xor b) xor b = a。xor运算可以用于简单的加密,比如我想对我MM说1314520,但怕别人知道,于是双方约定拿我的生日19880516作为密钥。1314520 xor 19880516 = 20665500,我就把20665500告诉MM。MM再次计算20665500 xor 19880516的值,得到1314520,于是她就明白了我的企图。
  相同位不同则为1,相同则为0。
  00111
  11100
  (^或者xor)
  ----------------
  11011

4.~取反就是如果是00111,则变为11000
[解决办法]
楼主有兴趣找本数字电路的书看看就知道了。
对按位与(&):100&101==100,1与1为1,0与其他(0,1)与为0
按位或(|):100|101==101,1或其他为1,0或0为0
按位异或(^):就是模二加啦。。不进位的加.。如111 xor 110==001
取反(~):就是把每位0变1,1变0

热点排行