c语言位运算

c语言位运算
c语言位运算

C语言位运算详解

c51头文件的作用与c头文件的作用类似。

absacc.h---包含允许直接访问8051不同存储区的宏定义

assert.h---文件定义assert宏,可以用来建立程序的测试条件ctype.h---字符转换和分类程序

“ctype”中c为字符型char的缩写,type 为类型。intrins.h---文件包含指示编译器产生嵌入式固有代码的程序的原型math.h---数学程序

reg51.h---51的特殊寄存器

reg52.h---52的特殊寄存器

位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long 类型。

C语言提供的位运算符列表:

运算符含义描述

& 按位与如果两个相应的二进制位都为1,则该位的结果值为1,否则为0

| 按位或两个相应的二进制位中只要有一个为1,该位的结果

值为1

^ 按位异或若参加运算的两个二进制位值相同则为0,否则为1 ~ 取反~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0

<< 左移用来将一个数的各二进制位全部左移N位,右补0 >> 右移将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0

1、“按位与”运算符(&)

按位与是指:参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为1,

则该位的结果值为1;否则为0。这里的1可以理解为逻辑中的true,0可以理解为逻辑中的false。按位与其

实与逻辑上“与”的运算规则一致。逻辑上的“与”,要求运算数全真,结果才为真。若,

A=true,B=true,则A∩B=true 例如:3&5 3的二进制编码是11(2)。(为了区分十进制和其他进制,本文规

定,凡是非十进制的数据均在数据后面加上括号,括号中注明其进制,二进制则标记为2)内存储存数据

的基本单位是字节(Byte),一个字节由8个位(bit)所组成。位是用以描述电脑数据量的最小单位。二

进制系统中,每个0或1就是一个位。将11(2)补足成一个字节,则是00000011(2)。5的二进制编码是

101(2),将其补足成一个字节,则是00000101(2)

按位与运算:

00000011(2)

&00000101(2)

00000001(2)

由此可知3&5=1

c语言代码:

#include

main()

{

int a=3;

int b = 5;

printf("%d",a&b);

}

按位与的用途:

(1)清零

若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合一下条件:

原来的数中为1的位,新数中相应位为0。然后使二者进行&运算,即可达到清零目的。

例:原数为43,即00101011(2),另找一个数,设它为148,即10010100(2),将两者按位与运算:

00101011(2)

&10010100(2)

00000000(2)

c语言源代码:

#include

main()

{

int a=43;

int b = 148;

printf("%d",a&b);

}

(2)取一个数中某些指定位

若有一个整数a(2byte),想要取其中的低字节,只需要将a与8个1按位与即可。

a 00101100 10101100

b 00000000 11111111

c 00000000 10101100

(3)保留指定位:

与一个数进行“按位与”运算,此数在该位取1.

例如:有一数84,即01010100(2),想把其中从左边算起的第3,4,

5,7,8位保留下来,运算如下:

01010100(2)

&00111011(2)

00010000(2)

即:a=84,b=59

c=a&b=16

c语言源代码:

#include

main()

{

int a=84;

int b = 59;

printf("%d",a&b);

}

2、“按位或”运算符(|)

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

例如:60(8)|17(8),将八进制60与八进制17进行按位或运算。00110000

|00001111

00111111

c语言源代码:

#include

main()

{

int a=060;

int b = 017;

printf("%d",a|b);

}

应用:按位或运算常用来对一个数据的某些位定值为1。例如:如果想使一个数a的低4位改为1,则只需要

将a与17(8)进行按位或运算即可。

3、“异或”运算符(^)

他的规则是:若参加运算的两个二进制位值相同则为0,否则为1

即0∧0=0,0∧1=1,1∧0=1,1∧1=0

例:00111001

∧ 00101010

00010011

c语言源代码:

#include

main()

{

int a=071;

int b = 052;

printf("%d",a^b);

}

应用:

(1)与1相“异或”,使特定位翻转

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

即:

01111010

^00001111

01110101

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

即可。

(2)与0相“异或”,保留原值

例如:012^00=012

00001010

^00000000

00001010

因为原数中的1与0进行异或运算得1,0^0得0,故保留原数。(3) 交换两个值,不用临时变量

例如: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)

等效于以下两步:

①执行前两个赋值语句:“a=a∧b;”和“b=b∧a;”相当于b=b∧(a∧b)。

②再执行第三个赋值语句:a=a∧b。由于a的值等于(a∧b),b的值等于(b∧a∧b),

因此,相当于a=a∧b∧b∧a∧b,即a的值等于a∧a∧b∧b∧b,等于b。

很神奇吧!

c语言源代码:

#include

main()

{

int a=3;

int b = 4;

a=a^b;

b=b^a;

a=a^b;

printf("a=%d b=%d",a,b);

}

4、“取反”运算符(~)

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

例如:~77(8)

源代码:

#include

main()

{

int a=077;

printf("%d",~a);

}

5、左移运算符(<<)

左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由

右操作数指定(右操作数必须是非负

值),其右边空出的位用0填补,高位左移溢出则舍弃该高位。

例如:将a的二进制数左移2位,右边空出的位补0,左边溢出的位舍弃。若a=15,即00001111(2),左移2

位得00111100(2)。

源代码:

#include

main()

{

int a=15;

printf("%d",a<<2);

}

左移1位相当于该数乘以2,左移2位相当于该数乘以2*2=4,15<<2=60,即乘了4。但此结论只适用于该

数左移时被溢出舍弃的高位中不包含1的情况。

假设以一个字节(8位)存一个整数,若a为无符号整型变量,则a=64时,左移一位时溢出的是0

,而左移2位时,溢出的高位中包含1。

6、右移运算符(>>)

右移运算符是用来将一个数的各二进制位右移若干位,移动的位数由右操作数指定(右操作数必须是非负

值),移到右端的低位被舍弃,对于无符号数,高位补0。对于有符号数,某些机器将对左边空出的部分

用符号位填补(即“算术移位”),而另一些机器则对左边空出的部分用0填补(即“逻辑移位”)。注

意:对无符号数,右移时左边高位移入0;对于有符号的值,如果原来符号位为0(该数为正),则左边也是移

入0。如果符号位原来为1(即负数),则左边移入0还是1,要取决于所用的计算机系统。有的系统移入0,有的

系统移入1。移入0的称为“逻辑移位”,即简单移位;移入1的称为“算术移位”。

例:a的值是八进制数113755:

a:1001011111101101 (用二进制形式表示)

a>>1: 0100101111110110 (逻辑右移时)

a>>1: 1100101111110110 (算术右移时)

在有些系统中,a>>1得八进制数045766,而在另一些系统上可能得到的是145766。Turbo C和其他一些C

编译采用的是算术右移,即对有符号数右移时,如果符号位原来为1,左面移入高位的是1。

源代码:

#include

main()

{

int a=0113755;

printf("%d",a>>1);

}

7、位运算赋值运算符

位运算符与赋值运算符可以组成复合赋值运算符。

例如: &=, |=, >>=, <<=, ∧=

例: a & = b相当于a = a & b

a << =2相当于a = a << 2

8 在C语言中逗号“,”也是一种运算符,称为逗号运算符。其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。其一般形式为:表达式1,表达式2

其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。

【例3.19】

main(){

int a=2,b=4,c=6,x,y;

y=(x=a+b),(b+c);

printf("y=%d,x=%d",y,x);

}

本例中,y等于整个逗号表达式的值,也就是表达式2的值,x是第一个表达式的值。对于逗号表达式还要说明两点:

逗号表达式一般形式中的表达式1和表达式2 也可以又是逗号表达式。

例如:

表达式1,(表达式2,表达式3)

形成了嵌套情形。因此可以把逗号表达式扩展为以下形式:

表达式1,表达式2,…表达式n

整个逗号表达式的值等于表达式n的值。

程序中使用逗号表达式,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值。

并不是在所有出现逗号的地方都组成逗号表达式,如在变量说明中,函数参数表中逗号只是用作各变量之间的间隔符。

9 强制类型转换运算符

其一般形式为:(类型说明符) (表达式)

其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。例如:

(float) a 把a转换为实型

(int)(x+y) 把x+y的结果转换为整型

c语言位运算符简介举例

c语言位运算符 C语言既具有高级语言的特点,又具有低级语言的功能。 所谓位运算是指进行二进制位的运算。 C语言提供的位运算: 运算符含义 & 按位与 | 按位或 ∧按位异或 ∽取反 << 左移 >> 右移 说明: 1。位运算符中除∽以外,均为二目(元)运算符,即要求两侧各有一个运算了量。 2、运算量只能是整形或字符型的数据,不能为实型数据。 “按位与”运算符(&) 规定如下: 0&0=0 0&1=0 1&0=0 1&1=1 例:3&5=? 先把3和5以补码表示,再进行按位与运算。 3的补码:00000011 5的补码:00000101 -------------------------------------------------------------------------------- &: 00000001 3&5=1 “按位或”运算符(|)

规定如下: 0|0=0 0|1=1 1|0=1 1|1=1 例:060|017=? 将八进制数60与八进制数17进行按位或运算。 060 00110000 017 00001111 -------------------------------------------------------------------------------- |: 00111111 060|017=077 “异或”运算符(∧),也称XOR运算符 规定如下: 0∧0=0 0∧1=1 1∧0=1 1∧1=0 例:57∧42=? 将十进制数57与十进制数42进行按位异或运算。 57 00111001 42 00101010 -------------------------------------------------------------------------------- ∧: 00010011 57∧42=19 “取反”运算符(∽) 规定如下: ∽0=1 ∽1=0 例:∽025=? 对八进制数25(即二进制0000000000010101)按位求反。

C语言中的运算符总结解读

C语言中的运算符总结 C语言中的操作符:算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式、下标引用、函数调用和结构成员。 1.算术操作符:+ - * / % 1除了% 操作符之外,其他的几个操作符均可以作用于整数和浮点数。 2对于/ 操作符,如果两个操作数都为整数,执行整数除法;而只要有浮点数执行的就是浮点数除法。 3% 操作符的两个操作数必须为整数,返回的是整除之后的余数。 2.移位操作符: << 左移操作符和 >> 右移操作符(针对二进制位、是对整数的操作 1左移操作符移位规则:左边丢弃、右边补0。 2右移操作符移位规则:(1算术移位:左边补符号位,右边丢弃。 (2逻辑移位:左边补0,右边丢弃。 注:对于移位运算符,不能移动负数位,这个是标准未定义的。 3.位操作符:& 按位与 | 按位或 ^ 按位异或(操作数都必须是整数,是针对二进制数的操作 4.赋值操作符:= 可以重新为变量赋值(赋值操作符是可以连续使用的,从右向左执行,不建议使用。 5.复合赋值符:+= = *= /= %= >>= <<= &= |= ^= 6.单目操作符:! 逻辑反操作(真---假

- 负值+ 正值 & 取地址从内存中取地址,不能从寄存器register 中取址。 sizeof 操作数的类型长度(以字节为单位 ~ 一个数的二进制按位取反 -- 前置、后置-- ++ 前置、后置++ (1前置++和--:先自增后使用,表达式的值是自增之后的值。 先自减后使用,表达式的值是自减之后的值。 (2后置++和--:先使用再自加。 先使用再自减。 * 间接访问操作符(解引用操作符 (类型强制类型转换 7.关系操作符:> >= < <= != 不相等 == 相等 注:== 相等 = 赋值,二者易混淆,需注意。 8.逻辑操作符:&& 逻辑与|| 逻辑或 注:逻辑与、逻辑或是判断真假的,按位与、按位或是对二进制数进行操作的。 对逻辑与操作,只要有一个为假,便不必再进行后边的计算;对逻辑或操作,只要有一个为真,便不必再进行后边的操作。 9.条件操作符(三目操作符:exp1 ? exp2 : exp3 先计算表达式1 的值,如果表达式1 为真,整个表达式的值就是表达式 2 的值,如果为假,整个表达式的值就是表达式 3 的值。

c语言第8章编译预处理及位运算习题答案.doc

编译预处理习题 一.单项选择题 1.在宏定义#define A 3.897678中,宏名A代替一个()。 A)单精度数 B)双精度数 C)常量 D)字符串 2.以下叙述中正确的是 A)预处理命令行必须位于源文件的开头 B)在源文件的一行上可以有多条预处理命令C)宏名必须用大写字母表示D)宏替换不占用程序的运行时间 3.C语言的编译系统对宏命令的处理()。 A)在程序运行时进行的 B)在程序连接时进行的 C)和C程序中的其它语句同时进行的 D)在对源程序中其它语句正式编译之前进行的 4.在文件包含预处理语句的中,被包含文件名用“< >”括起时,寻找被包含文件的方式 是()。 A)直接按系统设定的标准方式搜索目录 B)先在源程序所在目录搜索,再按系统设定的标准方式搜索 C)仅仅在源程序所在目录搜索 D)仅仅搜索当前目录 5.以下说法中正确的是 A)#define和printf都是C语句 B)#define是C语句,而printf不是 C)printf是C语句,但#define不是D)#define和printf都不是C语句 6.#define A 3.897678 #include main( ) { printf(“A=%f ”,A); } 程序运行结果为()。 A) 3.897678=3.897678 B) 3.897678=A C) A=3.897678 D)无结果7.有宏定义:#define LI(a,b) a*b #define LJ(a,b) (a)*(b) 在后面的程序中有宏引用:x=LI(3+2,5+8); y=LJ(3+2,5+8); 则x、y的值是()。 A) x=65,y=65 B) x=21,y=65 C) x=65,y=21 D)x=21,y=21 8.有以下程序 # define f(x) (x*x) main() { int i1, i2; i1=f(8)/f(4) ; i2=f(4+4)/f(2+2) ; printf("%d, %d\n",i1,i2); } 程序运行后的输出结果是

C语言的几种位操作运算

C语言的几种位操作运算 在汇编语言中有直接对位进行操作的指令,如置位、复位、位取反、测试某一位等,这对于硬件操作十分方便,在C语言中尽管也提供了一些位操作手段,如按位与、按位或、按位取反等,但它们是对一个字节进行操作,如要对具体的一位操作,仍旧不方便,以下给出了一些函数,可以模仿汇编语言的一些位操作功能。 #define uchar unsigned char /*测试变量某一位是否为‘1’,是返回真,否返回假,num为待测试的数,bit为位数,其值从0到7,下同*/ uchar bittest(uchar num,uchar bit) { if(num>>bit&0x01==1) return 1; else return 0; } uchar bitclr(uchar num,uchar bit) /*清除某一位*/ { uchar bit_value[]={1,2,4,8,16,32,64,128}; return num&~bit_value[bit]; } uchar bitset(uchar num,uchar bit) /*设置某一位*/ { uchar bit_value[]={1,2,4,8,16,32,64,128}; return num|bit_value[bit]; } uchar bitcpl(uchar num,uchar bit) /*取反某一位*/ { uchar bit_value[]={1,2,4,8,16,32,64,128}; if(num>>bit&0x01==1) return num&~bit_value[bit]; else return num|bit_value[bit];

C语言运算符大全 (2)

C语言运算符大全C语言的内部运算符很丰富,运算符是告诉编译程序执行特定算术或逻辑操作的符号。C语言有三大运算符:算术、关系与逻辑、位操作。另外,C还有一些特殊的运算符,用于完成一些特殊的任务。 表2-5列出了C语言中允许的算术运算符。在C语言中,运算符“+”、“-”、“*”和“/”的用法与大多数计算机语言的相同,几乎可用于所有C语言内定义的数据类型。当“/”被用于整数或字符时,结果取整。例如,在整数除法中,10/3=3。 一元减法的实际效果等于用-1乘单个操作数,即任何数值前放置减号将改变其符号。模运算符“%”在C 语言中也同它在其它语言中的用法相同。切记,模运算取整数除法的余数,所以“%”不能用于float和double类型。 最后一行打印一个0和一个1,因为1/2整除时为0,余数为1,故1%2取余数1。 C语言中有两个很有用的运算符,通常在其它计算机语言中是找不到它们的—自增和自减运算符,++和--。运算符“++”是操作数加1,而“--”是操作数减1,换句话说:x=x+1;同++x;x=x-1;同--x; 自增和自减运算符可用在操作数之前,也可放在其后,例如:x=x+1;可写成++x;或x++;但在表达式中这两种用法是有区别的。自增或自减运算符在操作数之前,C语言在引用操作数之前就先执行加1或减1 操作;运算符在操作数之后,C语言就先引用操作数的值,而后再进行加1或减1操作。请看下例: x=10; ;y=++x;

此时,y=11。如果程序改为: x=10;y=x++; 则y=10。在这两种情况下,x都被置为11,但区别在于设置的时刻,这种对自增和自减发生时刻的控制是非常有用的。在大多数C编译程序中,为自增和自减操作生成的程序代码比等价的赋值语句生成的代码 要快得多,所以尽可能采用加1或减1运算符是一种好的选择。 。下面是算术运算符的优先级: :最高++、- -- -(一元减) *、/、%最低+、-编译程序对同级运算符按从左到右的顺序进行计算。当然,括号可改变计算顺序。C语言 处理括号的方法与几乎所有的计算机语言相同:强迫某个运算或某组运算的优先级升高。 关系运算符中的“关系”二字指的是一个值与另一个值之间的关系,逻辑运算符中的“逻辑”二字指的是连接关系的方式。因为关系和逻辑运算符常在一起使用,所以将它们放在一起讨论。关系和逻辑运算符概念中的关键是True(真)和Flase(假)。C语言中,非0为True,0为Flase。使用关系或逻辑运算符的表达式对Flase和Ture分别返回值0或1(见表2-6)。 表2-6给出于关系和逻辑运算符,下面用1和0给出逻辑真值表。关系和逻辑运算符的优先级比算术运算符低,即像表达式10>1+12的计算可以假定是对表达式10>(1+12)的计算,当然,该表达式的结果为Flase。在一个表达式中允许运算的组合。例如: 10>5&&!(10<9)||3<=4 这一表达式的结果为True。

C语言位运算符

C语言位运算符 位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。 C语言提供的位运算符列表: 1、“按位与”运算符(&) 按位与是指:参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为1, 则该位的结果值为1;否则为0。这里的1可以理解为逻辑中的true,0可以理解为逻辑中的false。按位与其 实与逻辑上“与”的运算规则一致。逻辑上的“与”,要求运算数全真,结果才为真。若,A=true,B=true,则A∩B=true 例如: 3&5 3的二进制编码是11(2)。(为了区分十进制和其他进制,本文规定,凡是非十进制的数据均在数据后面加上括号,括号中注明其进制,二进制则标记为2)内存储存数据的基本单

位是字节(Byte),一个字节由8个位(bit)所组成。位是用以描述电脑数据量的最小单位。二进制系统中,每个0或1就是一个位。将11(2)补足成一个字节,则是00000011(2)。5的二进制编码是101(2),将其补足成一个字节,则是00000101(2)。 按位与运算: 00000011(2) &00000101(2) 00000001(2) 由此可知3&5=1 c语言代码: 按位与的用途: (1)清零 若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合一下条件: 原来的数中为1的位,新数中相应位为0。然后使二者进行&运算,即可达到清零目的。例: 原数为43,即00101011(2),另找一个数,设它为148,即10010100(2),将两者按位与运算: 00101011(2)&10010100(2)

c语言34种运算符

C语言运算符 算术运算符 TAG:运算符,数据类型 TEXT:算术运算符对数值进行算术运算,其中:加、减、乘、除、求余运算是双目运算。其结果可以是整数、单精度实数和双精度实数。自增、自减运算是单目运算,其操作对象只能使整型变量,不能是常量或表达式等其他形式。 REF:.TXT,+运算符.txt,-运算符.txt,*运算符.txt,/运算 符.txt,%运算符,++运算符,--运算符 加+ TAG:算术运算符,运算符,数据类型 TEXT:双目运算符,算数加法。单目运算符,表示正数。REF:.TXT,算数运算符.txt 减- TAG:算术运算符,运算符,数据类型 TEXT:双目运算符,算数减法。单目运算符,表示负数。REF:.TXT,算数运算符.txt 乘* TAG:算术运算符,运算符,数据类型 TEXT:*,双目运算符,算数乘法。 REF:.TXT,算数运算符.txt

除/ TAG:算术运算符,运算符,数据类型 TEXT:/,双目运算符,算数除法;如果两个参与运算的数是整数,表示整除,舍去小数部分。 如5.0/2等于2.5,而5/2等于2。 REF:.TXT,算数运算符.txt 取余% TAG:算术运算符,运算符,数据类型 TEXT:/,双目运算符,算数除法;如果两个参与运算的数是整数,表示整除,舍去小数部分。 如5.0/2等于2.5,而5/2等于2。 REF:.TXT,算数运算符.txt 自加++ TAG:算术运算符,运算符,数据类型 TEXT:单目运算符,针对整数运算,可以放在运算数的两侧,表示运算数增1。 REF:.TXT,算数运算符.txt 自减-- TAG:算术运算符,运算符,数据类型 TEXT:单目运算符,针对整数运算,可以放在运算数的两侧,表示运算数减1。

C语言程序设计 位运算

一、选择题 1、读程序片段: int x=20; printf(“%d\n”, ~x); 上面程序片段的输出结果是( ). A)02 B)–20 C)-21 D)-11 2、表达式~0x13的值是( ). A)0xFFEC B)0xFF71 C)0xFF68 D)0xFF17 3、在位运算中,操作数每右移一位,其结果相当于( ). A)操作数乘以2 B)操作数除以2 C)操作数除以4 D)操作数乘以4 4、在位运算中,操作数每左移一位,其结果相当于( ). A)操作数乘以2 B)操作数除以2 C)操作数除以4 D)操作数乘以4 5、设有以下语句: char x=3,y=6,z; z=x^y<<2; 则z的二进制值是( ). A)00010100 B)00011011 C)00011100 D)00011000 6、请读程序: struct bit {unsigned a_bit:2; unsigned b_bit:2; unsigned c_bit:1; unsigned d_bit:1; unsigned e_bit:2; unsigned word:8; }; main() {struct bit *p; unsigned int modeword; printf(“Enter the mode word (HEX):”); scanf(“%x”,&modeword); p=(struct bit *)&modeword; printf(“\n”); printf(“a_bit: %d\n”,p ->a_bit); printf(“b_bit: %d\n”,p ->b_bit); printf(“c_bit: %d\n”,p ->c_bit); printf(“d_bit: %d\n”,p ->d_bit); printf(“e_bit: %d\n”,p ->e_bit);} 若运行时从键盘输入: 96<回车> 则以上程序的运行结果是( ). A)a_bit: 1 B) a_bit: 2 C)a_bit: 2 D) a_bit: 1

C语言位操作运算详解

位运算 程序中的所有数在计算机内存中都是以二进制的形式储存的。位 位操作的优势 位运算是一种底层的运算,往往比我们普通的运算要快上许多许多 位运算是最高效而且占用内存最少的算法操作,执行效率非常高 位运算操作的是二进制数,会拥有一些二进制的特性,在实际问题可以方便运用 位运算只需较低的空间需求 位运算使用能使程序变得更加简洁和优美 位运算可以表示一些状态集合 运算符号 下面的a和b都是整数类型,则: : C语言 含义 按位与 a & b 按位或 a | b 按位异或 a ^ b 按位取反~a 左移| a << b 带符号右移 a >> b 无符号右移 优先级 C语言中位运算符之间,按优先级顺序排列为 优先级符号 1~ % <<、>> 2 3& 4^ 5| 6&=、^=、|=、<<=、>>= 概念简介以及技巧 |

本文会以C语言的交互环境来做代码演示 常见的二进制位的变换操作 and运算 & 判断奇偶数 对于除0以外的任意数x,使用x&1==1作为逻辑判断即可 if (x&1==1) { } 判断某个二进制位是否为1 比如第7位, 0x40转到二进制是0100 0000,代表第7位是1. if (n&0x40) { 比如说我想获得A的第三位就把B的第三位数字设置为1,则B为0000 0000 0000 0100,设置完之后再把A、B求与,其结果若为0,说明A的第三位为0,其结果为1,说明A的第三位为1. 同理:若要获得A的第五位,就把B设置为0000 0000 0001 0000,之后再求与。 : 通常在我们的程序中,数字B被称为掩码,其含义是专门用来测 试某一位是否为0的数值。 统计二进制中 1 的个数 利用x=x&(x-1),会将x用二进制表示时最右边的一个1变为0, 因为x-1会将该位变为0. int Count(int x) { int sum=0; while(x) { sum++; x=x&(x-1); } return sum; } or操作 生成组合编码,进行状态压缩

C语言运算符大全

C语言运算符大全 C语言的内部运算符很丰富,运算符是告诉编译程序执行特定算术或逻辑操作的符号。C语言有三大运算符:算术、关系与逻辑、位操作。另外,C还有一些特殊的运算符,用于完成一些特殊的任务。 2.6.1算术运算符 表2-5列出了C语言中允许的算术运算符。在C语言中,运算符“+”、“-”、“*”和“/”的用法与大多数计算机语言的相同,几乎可用于所有C语言内定义的数据类型。当“/”被用于整数或字符时,结果取整。例如,在整数除法中,10/3=3。 一元减法的实际效果等于用-1乘单个操作数,即任何数值前放置减号将改变其符号。模运算符“%”在C语言中也同它在其它语言中的用法相同。切记,模运算取整数除法的余数,所以“%”不能用于float和double类型。 最后一行打印一个0和一个1,因为1/2整除时为0,余数为1,故1%2取余数1。 2.6.2自增和自减 C语言中有两个很有用的运算符,通常在其它计算机语言中是找不到它们的—自增和自减运算符,++和--。运算符“++”是操作数加1,而“--”是操作数减1,换句话说:x=x+1;同++x;x=x-1;同--x; 自增和自减运算符可用在操作数之前,也可放在其后,例如:x=x+1;可写成++x;或x++;但在表达式中这两种用法是有区别的。自增或自减运算符在操作数之前,C语言在引用操作数之前就先执行加1或减1操作;运算符在操作数之后,C语言就先引用操作数的值,而后再进行加1或减1操作。请看下例: x=10; ;y=++x; 此时,y=11。如果程序改为: x=10;y=x++; 则y=10。在这两种情况下,x都被置为11,但区别在于设置的时刻,这种对自增和自减发生时刻的控制是非常有用的。在大多数C编译程序中,为自增和自减操作生成的程序代码比等价的赋值语句生成的代码 要快得多,所以尽可能采用加1或减1运算符是一种好的选择。 。下面是算术运算符的优先级: :最高++、- -- -(一元减) *、/、%最低+、-编译程序对同级运算符按从左到右的顺序进行计算。当然,括号可改变计算顺序。C语言 处理括号的方法与几乎所有的计算机语言相同:强迫某个运算或某组运算的优先级升高。 2.6.3关系和逻辑运算符 关系运算符中的“关系”二字指的是一个值与另一个值之间的关系,逻辑运算符中的“逻辑”二字指的是连接关系的方式。因为关系和逻辑运算符常在一起使用,所以将它们放在一起讨论。关系和逻辑运算符概念中的关键是True(真)和Flase(假)。C语言中,非0为True,0为Flase。使用关系或逻辑运算符的表达式对Flase和Ture分别返回值0或1(见表2-6)。

C语言运算符的结合性详细分析

C语言运算符的结合性分析 吴琼( 鄂州大学计算机系, 湖北鄂州) C 语言与其他高级语言相比, 一个显著的特点就是其运算符特别丰富, 共有34 种运算符。C 语言将这34 种运算符规定了不同的优先级别和结合性。优先级是用来标识运算符在表达式中的运算顺序的, 在求解表达式的值的时候, 总是先按运算符的优先次序由高到低进行操作, 可是, 当一个运算对象两侧的运算符优先级别相同时, 则按运算符的结合性来确定表达式的运算顺序。 运算符的结合性指同一优先级的运算符在表达式中操作的组织方向, 即: 当一个运算对象两侧运算符的优先级别相同时, 运算对象与运算符的结合顺序, C 语言规定了各种运算符的结合方向( 结合性) 。大多数运算符结合方向是“自左至右”, 即: 先左后右, 例如a- b+c, b 两侧有- 和+两种运算符的优先级相同, 按先左后右结合方向, b 先与减号结合, 执行a- b 的运算, 再执行加c 的运算。除了自左至右的结合性外, C 语言有三类运算符参与运算的结合方向是从右至左。即: 单目运算符, 条件运算符, 以及赋值运算符。关于结合性的概念在其他高级语言中是没有的, 这是C语言的特点之一,特别是从右至左结合性容易出错, 下面通过几个具体的运算符来剖析C 语言运算符的结合性。 若a 是一个变量, 则++a 或a++和- - a 或a- - 分别称为前置加或后置加运算和前置减或后置减运算, 且++a 或a++等价于a=a+1, - - a 或a- - 等价于a=a- 1, 即都是使该变量的值增加1 或减少1。由此可知, 对一个变量实行前置或后置运算, 其运算结构是相同的, 但当它们与其他运算结合在一个表达式中时, 其运算值就不同了。前置运算是变量的值先加1 或减1, 然后将改变后的变量值参与其他运算, 如x=5; y=8; c=++x*y; 运算后, c 的值是48,x 的值是6,y 的值是8。而后置运算是变量的值先参与有关运算, 然后将变量本身的值加1 减1, 即参加运算的是该变量变化前的值。如x=5; y=8; c=x++*y;运算后, c 的值是40,x 的值是6, y 的值是8。值得注意的是, 前置、后置运算只能用于变量, 不能用于常量和表达式, 且结合方向是从右至左。如当i=6 时, 求- i++的值和i 的值。由于“- ”(负号) “++”为同一个优先级, 故应理解为- (i++), 又因是后置加, 所以先有- i++的值为- 6, 然后i 增值1 为7, 即i=7。 例1 main() {int a=3,b=5,c; c=a*b+++b; printf ( “c=%d”, c);} 要得出c 的值, 首先要搞清+++的含义。++运算符的结合方向是自右向左的, 如果将表达式理解为:c=a*b+(++b);实际上C 编译器将表达式处理为:c=(a*b++)+b, 因为C 编译器总是从左至右尽可能多地将若干个字符组成一个运算符, 如i+++j 等价于(i++)+j。接下来是解决a*b++的问题, 因为++运算符的运算对象只能是整型变量而不能是表达式或常数, 所以a*b++显然是a*(b++)而非(a*b)++, 因此整个表达式就是c=(a*(b++))+b。 例2 main() { int i=1,j; j=i+++i+++i++; printf( “i=%d,j=%d\n”, i,j);} 例3 main() { int i=1,m; m=++i+++i+++i; printf( “i=%d,m=%d\n”, i,m);}

C语言位运算符(附例题讲解)

C语言提供了六种位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 12.1.1按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。 例如:9&5可写算式如下: 00001001 (9的二进制补码) &00000101 (5的二进制补码) 00000001 (1的二进制补码) 可见9&5=1。 按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清0 ,保留低八位,可作a&255运算( 255 的二进制数为0000000011111111)。 【例12.1】 main(){ int a=9,b=5,c; c=a&b; printf("a=%d\nb=%d\nc=%d\n",a,b,c); } 12.1.2按位或运算 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。 例如:9|5可写算式如下: 00001001 |00000101 00001101 (十进制为13)可见9|5=13 【例12.2】 main(){ int a=9,b=5,c; c=a|b; printf("a=%d\nb=%d\nc=%d\n",a,b,c); } 12.1.3按位异或运算

按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下:00001001 ^00000101 00001100 (十进制为12) 【例12.3】 main(){ int a=9; a=a^5; printf("a=%d\n",a); } 12.1.4求反运算 求反运算符~为单目运算符,具有右结合性。其功能是对参与运算的数的各二进位按位求反。例如~9的运算为: ~(0000000000001001)结果为:1111111111110110 12.1.5左移运算 左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。 例如: a<<4 指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。 12.1.6右移运算 右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。例如: 设a=15, a>>2 表示把000001111右移为00000011(十进制3)。 应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。Turbo C和很多系统规定为补1。 【例12.4】 main(){ unsigned a,b; printf("input a number: "); scanf("%d",&a); b=a>>5;

C语言位运算符:与、或、异或、取反

C语言位运算符:与、或、异或、取反、左移和右移语言位运算符:与、或、异或、取反、左移和右移 位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。 C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。 C语言提供的位运算符列表: 运算符含义描述 &按位与如果两个相应的二进制位都为1,则该位的结果值为1,否则为0|按位或两个相应的二进制位中只要有一个为1,该位的结果值为1 ^按位异或若参加运算的两个二进制位值相同则为0,否则为1 ~取反~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0<<左移用来将一个数的各二进制位全部左移N位,右补0 >>右移将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0 1、“按位与”运算符(&) 按位与是指:参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。这里的1可以理解为逻辑中的true,0可以理解为逻辑中的false。按位与其实与逻辑上“与”的运算规则一致。 逻辑上的“与”,要求运算数全真,结果才为真。若,A=true,B=true,则 A∩B=true例如:3&5 3的二进制编码是11(2)。(为了区分十进制和其他进制,本文规定,凡是非十进制的数据均在数据后面加上括号,括号中注明其进制,二进制则标记为2)内存储存数据的基本单位是字节(Byte),一个字节由8个位(bit)所组成。位是用以描述电脑数据量的最小单位。二进制系统中,每个0

或1就是一个位。将11(2)补足成一个字节,则是00000011(2)。5的二进制编码是101(2),将其补足成一个字节,则是00000101(2) 按位与运算: 00000011(2) &00000101(2) 00000001(2) 由此可知3&5=1 c语言代码: #include main() { int a=3; int b = 5; printf("%d",a&b); } 按位与的用途: (1)清零 若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合一下条件: 原来的数中为1的位,新数中相应位为0。然后使二者进行&运算,即可达到清零目的。

C语言位运算

C语言位运算 0或者1值的运算对象出发,计算出具有0或者1 值的结果。 C语言提供了6种基本位运算功能:位否定、位与、位或、位异或、位左移和位右移。其中除位否定是单目运算外,其余5种均为 双目运算,6个位运算符分为4个优先级别,参见表3-9。 表3-9 逻辑运算符 运算符含义运算对象个数结合方向优先级 ~ 按位求反单目运算符自右向左1 << 按位左移双目运算符自左向右2 >> 按位右移双目运算符自左向右2 & 按位与双目运算符自左向右3 | 按位或双目运算符自左向右4 ^ 按位异或双目运算符自左向右5 说明: ①位运算的优先级是:~→<<、>>→&→|→^。 ②位运算的运算对象只能是整型(int)或字符型(char)的数据。 ③位运算是对运算量的每一个二进制位分别进行操作。 3.5.2 按位逻辑运算 按位逻辑运算包括:位与、位或、位异或和位否定等四种运算。为了帮助读者理解,我们设a和b都是16位二进制整数, 它们的值分别是: a: 1010,1001,0101,0111 b: 0110,0000,1111,1011 为了便于阅读,a和b中每4位用一个逗号分开。以下介绍对于a和b的位与、位或、位异或和位否定等按位逻辑运算。 1.按位与运算(&) 按位与是对两个运算量相应的位进行逻辑与,"&"的运算规则与逻辑与"&&"相同。按位与表达式:c=a&b a: 1010,1001,0101,0111 & b: 0110,0000,1111,1011 c: 0010,0000,0101,0011 2.按位或运算(|) 按位或是对两个运算量相应的位进行逻辑或操作,其运算规则与逻辑或"||"相同。按位或表达式:c=a|b a: 1010,1001,0101,0111 | b: 0110,0000,1111,1011 c: 1110,1001,1111,1111 3.按位异或运算(^) 按位异或运算的规则是:两个运算量的相应位相同,则结果为0,相异则结果为1。 即:0^0=0 0^1=1 1^0=1 1^1=0

逻辑运算符和表达式(c语言)

南京高等职业技术学校 课堂教学设计 授课时间:2014年11月6日第11周星期四教学目标教学准备 授课教师课时课程通过本节课的学习,学生能够: 1.清晰地说出各种逻辑运算符; 2.正确运算出逻辑表达式的值,并 通过程序验证结果; 重点教案□√ 马丽娟 1 C语言多媒体课件□√班级授课地点课题教学讲义□ 512212 机房4.2逻辑运算符与逻辑表达 式 1.逻辑表达式的求值运算; 2.逻辑表达式的求值优化。 学生工作页□ 课堂特殊要求(指教师、学生的课前准备活动等) 教师:安装Win-TC程序难点 教具□√ 逻辑表达式的求值优化授课形式 理论讲授课 教学环节时间分配教师活动学生活动教学方法媒体手段导入新课 5 提出问题,并举例说明听讲、思考、回答讲授法PPT 新课讲授20 讲授、分析听讲、讨论并记录讲授法PPT 巩固练习15 布置任务、巡视、答疑思考、编程并回答问题练习法Win-TC 课堂小结 3 归纳、总结听讲、回答问题讲授法PPT 布置作业 2 布置作业记录讲授法PPT 板书设计 §4.2 逻辑运算符与逻辑表达式 ?逻辑运算符:&&、||、! ?逻辑表达式的值:非0即1 ?逻辑运算的求值优化工作任务/教学情境设置 无课后作业 书面作业:P52 随堂练习 课后反思

教案纸 教学内容 4.2 逻辑运算符与逻辑表达式 一、复习导入(5min) 1. 复习:请学生说出关系运算符有哪些? 请学生回答关系运算表达式的值? 教师进行补充。 2.导入新课: 1、学生参加技能大赛培训的条件? ?扎实的专业知识与较高的实践能力 教师强调与的关系 2、参加技能大赛集训而停课的条件? ?移动互联或智能家居 教师强调或的关系 3、学生回答引入禁烟区的条件? ?没有吸烟非 教师强调非的关系 二、新课讲授(20min) 逻辑运算符 1.教师根据逻辑关系给出三种逻辑运算符的表示形式: &&、||、! 2.教师利用具体的表达式关系分析各种逻辑运算符的作用: 逻辑与相当于英语中的and; 逻辑或相当于英语中的or; 逻辑非相当于英语中的no; 3.教师根据具体的逻辑关系引出逻辑表达式的概念及表示形式: 表达式1&&表达式2 a&&b 表达式1||表达式2 a || b !表达式!a

c语言位运算

C语言位运算详解 c51头文件的作用与c头文件的作用类似。 absacc.h---包含允许直接访问8051不同存储区的宏定义 assert.h---文件定义assert宏,可以用来建立程序的测试条件ctype.h---字符转换和分类程序 “ctype”中c为字符型char的缩写,type 为类型。intrins.h---文件包含指示编译器产生嵌入式固有代码的程序的原型math.h---数学程序 reg51.h---51的特殊寄存器 reg52.h---52的特殊寄存器 位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long 类型。 C语言提供的位运算符列表: 运算符含义描述 & 按位与如果两个相应的二进制位都为1,则该位的结果值为1,否则为0 | 按位或两个相应的二进制位中只要有一个为1,该位的结果

值为1 ^ 按位异或若参加运算的两个二进制位值相同则为0,否则为1 ~ 取反~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0 << 左移用来将一个数的各二进制位全部左移N位,右补0 >> 右移将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0 1、“按位与”运算符(&) 按位与是指:参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为1, 则该位的结果值为1;否则为0。这里的1可以理解为逻辑中的true,0可以理解为逻辑中的false。按位与其 实与逻辑上“与”的运算规则一致。逻辑上的“与”,要求运算数全真,结果才为真。若, A=true,B=true,则A∩B=true 例如:3&5 3的二进制编码是11(2)。(为了区分十进制和其他进制,本文规 定,凡是非十进制的数据均在数据后面加上括号,括号中注明其进制,二进制则标记为2)内存储存数据 的基本单位是字节(Byte),一个字节由8个位(bit)所组成。位是用以描述电脑数据量的最小单位。二

c语言中的关系运算符和逻辑运算符

1.逻辑运算符 逻辑运算符是指用形式逻辑原则来建立数值间关系的符号。 Turbo C的逻辑运算符如下: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 操作符作用 ───────────────────────────── && 逻辑与 || 逻辑或 ! 逻辑非 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.关系运算符 关系运算符是比较两个操作数大小的符号。 Turbo C的关系运算符如下: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 操作符作用 ───────────────────────────── > 大于 >= 大于等于 < 小于 <= 小于等于 == 等于 != 不等于 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━关系运算符和逻辑运算符的关键是真(true)和假(false)的概念。Turbo C中 true可以是不为0的任何值, 而false则为0。使用关系运算符和逻辑运算符表达式时, 若表达式为真(即true)则返回1, 否则, 表达式为假(即false), 则返回0。 例如: 100>99 返回1 10>(2+10) 返回0 !1&&0 返加0 对上例中表达式!1&&0, 先求!1和先求1&&0将会等于出不同的结果, 那么何 者优先呢? 这在Turbo C中是有规定的。有关运算符的优先级本节后面将会讲到。 3.按位运算符

Turbo C和其它高级语言不同的是它完全支持按位运算符。这与汇编语言的位操作有些相似。 Turbo C中按位运算符有: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 操作符作用 ──────────────────────────── & 位逻辑与 | 位逻辑或 ^ 位逻辑异或 - 位逻辑反 >> 右移 << 左移 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━按位运算是对字节或字中的实际位进行检测、设置或移位, 它只适用于字符 型和整数型变量以及它们的变体, 对其它数据类型不适用。 关系运算和逻辑运算表达式的结果只能是1或0。而按位运算的结果可以取0 或1以外的值。 要注意区别按位运算符和逻辑运算符的不同, 例如, 若x=7, 则x&&8 的值为真(两个非零值相与仍为非零), 而x&8的值为0。 移位运算符">>"和"<<"是指将变量中的每一位向右或向左移动, 其通常形式为: 右移: 变量名>>移位的位数 左移: 变量名<<移位的位数 经过移位后, 一端的位被"挤掉", 而另一端空出的位以0 填补, 所以, Turbo C中的移位不是循环移动的。 4.Turbo C的特殊运算符 一)"?"运算符 "?"运算符是一个三目运算符, 其一般形式是: <表达式1>?<表达式2>:<表达式3>; "?"运算符的含义是: 先求表达式1的值, 如果为真, 则求表达式2 的值并把它作为整个表达式的值; 如果表达式1 的值为假, 则求表达式3 的值并把它作为整个表达式的值。 例如: main()

C语言位运算练习题1

C语言位运算练习题 一、选择题: (1)以下程序的功能是进行位运算 main() { unsigned char a, b; a=7^3; b= ~4 & 3; printf("%d %d ",a,b); } 程序运行后的输出结果是 A)4 3 B)7 3 C)7 0 D)4 0 (2)有以下程序 main() { int c=35; printf("%d ",c&c); } 程序运行后的输出结果是 A)0 B)70 C)35 D)1

(3) 设有定义语句:char c1=92,c2=92;,则以下表达式中值为零的是 A) c1^c2 B) c1&c2 C) ~c2 D) c1|c2 (4) 有以下程序 main( ) { unsigned char a,b; a=4|3; b=4&3; printf(“%d %d ”,a,b(; } 执行后输出结果是 A) 7 0 B) 0 7 C) 1 1 D) 43 0 (5) 有以下程序 main() { int x=3, y=2,z=1; printf("%d ",x/y&~z); } 程序运行后的输出结果是 A) 3

B) 2 C) 1 D) 0 (6) 设char型变量x中的值为10100111,则表达式(2+x)^(~3)的值是 A) 10101001 B) 10101000 C) 11111101 D) 01010101 (7) 有以下程序 main() { unsigned char a,b,c; a=0x3; b=a|0x8; c=b<<1; printf(“%d%d ”,b,c); } 程序运行后的输出结果是 A) –11 12 B) –6 –13 C) 12 24 D) 11 22 (8) 以下程序的输出结果是 main() { char x=040; printf("%0 ",x<<1);

c语言运算符优先级

c语言运算符优先级 Turbo C的运算符非常丰富, 主要分为三大类: 算术运算符, 关系运算符与 逻辑运算符, 按位运算符。除此之外, 还有一些用于完成特殊任务的运算符。下 面分别进行介绍。 5.1 算术运算符 Turbo C的算术运算符如下: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 操作符作用 ──────────────────────────── + 加, 一目取正 - 减, 一目取负 * 乘 / 除 % 取模 -- 减1 ++ 加1 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 一、一目和二目操作 一目操作是指对一个操作数进行操作。例如: -a是对a进行一目负操作。 二目操作(或多目操作)是指两个操作数(或多个操作数)进行操作。 在Turbo C中加、减、乘、除、取模的运算与其它高级语言相同。需要注意 的是除法和取模运算。 例如: 15/2 是15除以2商的整数部分7 15%2 是15除以2的余数部分1 对于取模运算符"%", 不能用于浮点数。 另外, 由于Turbo C中字符型数会自动地转换成整型数, 因此字符型数也可 以参加二目运算。 例如: main() { char m, n; /*定义字符型变量*/ m='c'; /*给m赋小写字母'c'*/ n=m+'A'-'a'; /*将c中的小写字母变成大写字母'B'后赋给n*/ ... } 上例中m='c'即m=98, 由于字母A和a的ASCII码值分别为65和97。这样可以将

小写字母变成大写字母, 反之, 如果要将大写字母变成小写字母, 则用c+ 'a' -'A'进行计算。 二、增量运算 在Turbo C中有两个很有用的运算符, 在其它高级语言中通常没有。这两个 运算符就是增1和减1运算符"++"和"--", 运算符"++"是操作数加1, 而"--" 则是 操作数减1。 例如: x=x+1 可写成x++, 或++x x=x-1 可写成x--, 或--x x++(x--)与++x(--x)在上例中没有什么区别, 但x=m++和x=++m却有很大差别。 x=m++ 表示将m的值赋给x后, m加1。 x=++m 表示m先加1后, 再将新值赋给x。 三、赋值语句中的数据类型转换 类型转换是指不同类型的变量混用时的类型改变。 在赋值语句中, 类型转换规则是: 等号右边的值转换为等号左边变量所属的类型。 例如: main() { int i, j; /*定义整型变量*/ float f, g=2.58; /*定义浮点型变量*/ f=i*j; /*i与j的乘积是整型数, 被转换成为浮点数赋给f*/ i=g; /*g中的浮点型数转换成为整型数赋给i*/ ... } 由于Turbo C按上述数据类型转换规则, 因此在作除法运算时应特别注意。 例如: main() { float f; int i=15; f=i/2; } 上面程序经运行后, f=7并不等于准确值7.5。正确的程序应该是: main() { float f; int i=15;

相关文档
最新文档