﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-清睛仪明-文章分类-C/C++</title><link>http://www.blogjava.net/msmary/category/35182.html</link><description>书山有路勤为径，学海无涯苦作舟</description><language>zh-cn</language><lastBuildDate>Tue, 14 Oct 2008 07:52:29 GMT</lastBuildDate><pubDate>Tue, 14 Oct 2008 07:52:29 GMT</pubDate><ttl>60</ttl><item><title>按位运算符</title><link>http://www.blogjava.net/msmary/articles/234211.html</link><dc:creator>谭明</dc:creator><author>谭明</author><pubDate>Tue, 14 Oct 2008 05:43:00 GMT</pubDate><guid>http://www.blogjava.net/msmary/articles/234211.html</guid><wfw:comment>http://www.blogjava.net/msmary/comments/234211.html</wfw:comment><comments>http://www.blogjava.net/msmary/articles/234211.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/msmary/comments/commentRss/234211.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/msmary/services/trackbacks/234211.html</trackback:ping><description><![CDATA[C提供了六种位运算运算符；这些运算符可能只允许整型操作数，即char、short、int和long，无论signed或者unsigned。 <br />
&amp; 按位与(AND) <br />
| 按位或(OR)<br />
^ 按位异或(XOR)<br />
&lt;&lt; 左移 <br />
&gt;&gt; 右移 <br />
~ 求反码（一元运算）<br />
<br />
1. 按位与运算 按位与运算符"&amp;"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时，结果位才为1 ，否则为0。参与运算的数以补码方式出现。 <br />
<br />
例如：9&amp;5可写算式如下： 00001001 (9的二进制补码)&amp;00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&amp;5=1。15&amp;127=(01111111)&amp;(00001111)=(00001111)=15<br />
&nbsp;<br />
按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 ， 保留低八位， 可作 a&amp;255 运算 ( 255 的二进制数为0000000011111111)。 <br />
#include &lt;stdio.h&gt;<br />
int main(void){ <br />
int a=9,b=5,c; <br />
c=a&amp;b; <br />
printf("a=%d\nb=%d\nc=%d\n",a,b,c); <br />
} <br />
<br />
2. 按位或运算 按位或运算符&#8220;|&#8221;是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时，结果位就为1。参与运算的两个数均以补码出现。 <br />
例如：9|5可写算式如下： 00001001|00000101 <br />
00001101 (十进制为13)可见9|5=13 <br />
int main(void){ <br />
int a=9,b=5,c; <br />
c=a|b; <br />
printf("a=%d\nb=%d\nc=%d\n",a,b,c); <br />
} <br />
<br />
3. 按位异或运算 按位异或运算符&#8220;^&#8221;是双目运算符。其功能是参与运算的两数各对应的二进位相异或，当两对应的二进位相异时，结果为1。参与运算数仍以补码出现，例如9^5可写成算式如下： 00001001^00000101 00001100 (十进制为12) <br />
int main(void){ <br />
int a=9; <br />
a=a^15; <br />
printf("a=%d\n",a); <br />
} <br />
<br />
4. 求反运算 求反运算符～为单目运算符，具有右结合性。 其功能是对参与运算的数的各二进位按位求反。例如～9的运算为： ~(0000000000001001)结果为：1111111111110110 <br />
<br />
5. 左移运算 左移运算符&#8220;&lt;&lt;&#8221;是双目运算符。其功能把&#8220;&lt;&lt; &#8221;左边的运算数的各二进位全部左移若干位，由&#8220;&lt;&lt;&#8221;右边的数指定移动的位数， <br />
高位丢弃，低位补0。例如： a&lt;&lt;4 指把a的各二进位向左移动4位。如a=00000011(十进制3)，左移4位后为00110000(十进制48)。6. 右移运算右移运算符&#8220;&gt;&gt;&#8221;是双目运算符。其功能是把&#8220;&gt;&gt; &#8221;左边的运算数的各二进位全部右移若干位，&#8220;&gt;&gt;&#8221;右边的数指定移动的位数。 <br />
例如：设 a=15，a&gt;&gt;2 表示把000001111右移为00000011(十进制3)。应该说明的是，对于有符号数，在右移时，符号位将随同移动。当为正数时， 最高位补0，而为负数时，符号位为1，最高位是补0或是补1 取决于编译系统的规定。Turbo C和很多系统规定为补1。 <br />
int main(void){ <br />
unsigned a,b; <br />
printf("input a number: "); <br />
scanf("%d",&amp;a); <br />
b=a&gt;&gt;5; <br />
b=b&amp;15; <br />
printf("a=%d\tb=%d\n",a,b); <br />
} <br />
<br />
请再看一例! <br />
int main(void){ <br />
char a='a',b='b'; <br />
int p,c,d; <br />
p=a; <br />
p=(p&lt;&lt;8)|b; <br />
d=p&amp;0xff; <br />
c=(p&amp;0xff00)&gt;&gt;8; <br />
printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d); <br />
}</ca><br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/msmary/aggbug/234211.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/msmary/" target="_blank">谭明</a> 2008-10-14 13:43 <a href="http://www.blogjava.net/msmary/articles/234211.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>