如:8/6);%(模运算符,或称求余运算符,%两侧均应为整型数据。C语言规定了运算符的优先级运算原则:在表达式的求值运算过程中,从左至右,按优先级别的高低执行。自增自减运算符只能用于变量,不能用于常量。例2.6自增自减运算符的使用。......
2023-11-18
C语言中,所谓的位运算是指进行二进制位的运算。在系统软件中,常常需要处理二进制位的问题。
C语言提供了6个位操作运算符,即:
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移
说明:
(1)位运算符中除~以外,均为二目(元)运算符,即要求位运算符两侧各有一个运算量。
(2)运算量只能是整型或字符型的数据,不能为实型数据。
1.“按位与”运算符( & )
“按位与”是指参加运算的两个数按二进制位进行“与”运算。如果两个相应的二进制位都为1,则该位的结果值为1,否则为0,即:0 & 0=0;0 & 1=0;1 & 0=0;1 & 1=1。
例如:4 & 5按位与的结果为:
由此可知4 & 5=4。
如果参加 & 的数是负数(如-4 & -5),则以补码形式表示为二进制数,然后按位进行运算。
“按位与”运算通常用来对某些位清0或保留某些位。若想对一个存储单元清零,那么可以找一个数与原来的数中为1的位刚好相反的数,然后使二者进行 & 运算,即可达到清零目的。例如把a的高八位清0,保留低8位,可以a & 255运算(255的二进制数为0000000011111111)。
2.“按位或”运算符(|)
“按位或”是指参加运算的两个数中,两个相应的二进制位中只要有一个为1,该位的结果值为1,即0|0=0;0|1=1;1|0=1;1|1=1。
例如:11|5按位或的结果为:
由此可知11|5=15。
“按位或”运算常用来对一个数据的某些位定值为1。例如,如果想把a的低4位改为1,则只需要将a与15进行1运算即可。(www.chuimin.cn)
3.“按位异或”运算(^)
“按位异或”是指参加运算的两个数中,两个对应的二制位的数如果相异,该位的结果为1,否则该位的结果为0,即0^0=0;0^1=1;1^0=1;1^1=0。
例如:13^6按位异或的结果为:
按位异或主要用两个数的值交换,省去了定义新的变量,或者使特定的数翻转。
4.“取反”运算符(~)
“取反”(~)是单目(元)运算符,用于求整数的二进制反码,即分别将操作数各二进制位上的1变为0,0变为1。
例如:~15取反后结果为:
由此可知~15=24。
~取反运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他位运算符都高。例如:~a & b,先进行~a运算,然后进行 & 运算。
5.左移运算符(<<)
左移运算符用来将一个数的各二进制位左移若干位,移动的位数由右操作数指定(右操作数必须是非负值),其右边空出的位用0补齐,高位左移溢出则舍弃该高位。
例如:a=21,其对应的二进制数为00010101。若a=a<<2,则将a的二进制数左移2位。其结果为:01010100,即a=84。
左移1位相当于该数乘以2(21),左移2位相当于该数乘以4(22)。上面的例子21<<2=84,即将21乘以4。但是,此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。假设以1个字节(8位)存一个整数,若a为无符号整型变量,则a=64时,左移1位时溢出的是0,而左移2位时,溢出的高位中包含1,最终输出结果为0。
6.右移运算符(>>)
右移运算符是用来将一个数的各二进制位右移若干位,移动的位数由右操作数指定(右操作数必须是非负值),移到右端的低位被舍弃。对于无符号数,高位补0;对于有符号数,高位补0还是补1取决于编译系统。高位移入0的称为“逻辑移位”,即简单移位;高位移入1的称为“算术移位”。例如:a的值是八进制数113755,则
a:1001011111101101
a>>1:0100101111110110(逻辑右移时)
a>>1:1100101111110110(算术右移时)
在有些系统中,a>>1得八进制数045766,而在另一些系统上可能得到的是八进制数145766。Turbo C和其他一些C编译采用的是算术右移,即对有符号数右移时,如果符号位原来为1,左面移入高位的是1。
例2.7 右移实例。
有关C语言程序设计 第2版的文章
如:8/6);%(模运算符,或称求余运算符,%两侧均应为整型数据。C语言规定了运算符的优先级运算原则:在表达式的求值运算过程中,从左至右,按优先级别的高低执行。自增自减运算符只能用于变量,不能用于常量。例2.6自增自减运算符的使用。......
2023-11-18
逻辑运算符中的“ & & ”和“||”的优质级低于关系运算符,而“!”的优质级高于算术运算符。C语言编译系统在给出逻辑运算结果时,以数值“1”代表“真”,以“0”代表“假”。在逻辑表达式求解中,并不是所有的逻辑运算符都执行。图2.4逻辑运算符的优先级......
2023-11-18
C语言中逻辑运算符及其含义见表3.2。表3.2逻辑运算符及其含义逻辑运算符“&&”和“||”是双目运算符,具有左结合性;“!”表3.3逻辑运算真值表C语言中进行逻辑表达式求值运算时,不但要注意逻辑运算符本身的运算规则,而且还必须要遵循下面的两条原则:·对逻辑表达式从左到右进行求解。......
2023-11-20
下面介绍6 种位运算符的运算与应用。在进行位运算之前,需把参加位运算的对象的值转换为二进制数。例如:4.按位与运算按位与运算符(&)将其两边数据对应的二进制位按位进行与运算。清零,即使全部二进制位置为0,只要找一个二进制数,其中各个位符合条件:原来的数中为1 的位,新数中相应的位为0,其他位不考虑,然后使二者进行&运算,即可达到清零的目的。图8.1进制转换程序运行结果......
2023-10-21
C语言中,提供了用于二进制位操作的运算符以及复合运算符对程序设计中的位运算提供支持,见表11.1。表11.1C语言中的位运算符1.按位与运算符(&)按位与运算符(&)是一个双目运算符,其功能是:将参加操作的两个对象的各个二进制位分别对应进行“与”运算,即:两者都为1时结果为1,否则结果为0。例如,把整型变量a的低16位置1,保留高16位,可以通过对变量a施加a|0xffff运算实现。按位异或运算示例。......
2023-11-20
自增、自减运算符是C 语言中最具特色的两个单目运算符,其操作对象只有一个,这两个运算符既可以放在操作数之前,也可以放在操作数之后。自增、自减运算符的结合方向为自右至左。......
2023-10-21
C语言中的运算符大多数属于双目运算符。C程序中,运算符必须与运算对象结合在一起才能体现其功能,与运算符密切相关的程序构成成分是表达式。用运算符将运算对象连接起来的、符合C语言语法规则的式子称为C语言的表达式。一个表达式有一个值及其类型,它们等于计算表达式所得结果的值和类型。表2.6给出了C语言中的运算符、运算符的优先级和结合性。......
2023-11-20
C 语言中,赋值被认为是一种运算,有赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。其形式为:1.赋值运算符赋值运算符为“=”,功能是将赋值运算符右边的表达式的值赋给其左边的变量。......
2023-10-21
相关推荐