1.c语言所有的运算符

(取自C程序设计(第四版)谭浩强):

且或非java 且或非c语言符号_赋值


且或非java 且或非c语言符号_运算符_02

2.常见符号与数学运算符的区别:
(1)“()”:数学里有小括号、中括号之分,例如:[(3+4)*2+2]*3
-----------c语言里都用小括号,同上c语言的代码形式:((3+4)2+2)3;还用于函数
(2)逻辑运算符:“!”(非)、“&&”(且) 、“||”(或) (根本在于真和假,例如离散的布尔代数)
--------真:非0
--------假:0
--------表达式1 && 表达式2 :表达式12都为真才为真
--------表达式1 || 表达式2 :表达式12有一个为真就为真
(3)位运算符:针对二进制 “~”、“&”、“|”、“<<”、“>>” (考试重点,难点)
假定数字为一字节(字节是计算机内关于内存或数据的最小单位,一字节等于八个位,1Byte=8bit,位为数据表示的最小单位;一般用字节来表示内存大小,例如一个G字节的U盘):
12-------->0000 1100
13-------->0000 1101
~12------->1111 0011 (按位取反)
~13------->1111 0010
12&13—>0000 1100 (按位与,相同的位都为1,才为1)
12 | 13—>0000 1101 (按位或,相同位有一个是1,就为1)
12^13---->0000 0001 (按位异或:相同的位不一样才为1)
12<<1 ---->000 1100 0 (按位左移,右边补0) 24=122 相当于乘法
12<<2 ---->00 1100 00 48=12
4
12>>1 —>0 0000 110 (按位右移,左边补符号位,这里为0) 6=12/2 相当于除法
(4)“++”,“–”

int main()//“++”的相关应用
{
	int i=10;
	int j=++i;//前置++,先加再赋值

    printf("%d,%d\n",i,j);

	int k=i++;//后置++,先赋值,再加
	printf("%d,%d\n",i,k);

	return 0;
}

运行结果:

且或非java 且或非c语言符号_运算符_03

int main()//“--”的相关应用
{
	int i=10;
	int j=--i;//前置--,先加再赋值

    printf("%d,%d\n",i,j);

	int k=i--;//后置--,先赋值,再加
	printf("%d,%d\n",i,k);

	return 0;
}

运行截图:

且或非java 且或非c语言符号_c语言_04


(5)& 、 (一词多义)

&:按位与:12&13 (为双目运算符)

-----取地址符:&a (为单目运算符,只跟一个操作数字)

:乘法符号:3*4

----指针:int *p;

(6)(类型):强制类型转换

int a=12.5; //不报错,但编译器会给警告,可运行,不过会产生数据丢失。

且或非java 且或非c语言符号_赋值_05


int a=(int )12.5; //对12.5进行强转。

且或非java 且或非c语言符号_赋值_06


(7)sizeof():求字节长度

(8)/:除法,注意整除问题:整数/整数,结果也是去掉小数的整数;如5/2->2

(9)%:取余,取得余数,如5/2->1

(10)<=:小于等于,注意与数学区分,注意连续区分

int main()
{
	if(3<5<2)//考点
	{
		printf("真\n");
	}
	else
	{
		printf("假\n");
	}
/*
"<"是双目运算符,所以运行“3<5<2”时,会先判断“3<5”,为真.从而“3<5<2”运行完第一个"<"后,等价变为“1<2”,为真。所以结果为真。
*/
	return 0;
}

结果为:

且或非java 且或非c语言符号_c语言_07


注意;系统会给以警告

且或非java 且或非c语言符号_c语言_08


(11)“=”,赋值,讲右边的值,赋值给左边的变量,例如a=12。

(12)“==”,相等,判断左右是否相等。

--------“!=”,非等。

(13)“?:”,条件运算符。

表达式1 ?表达式2 :表达式3。

如果表达式为真,进行表达式2;为假,进行表达式3。

c= a>b ? a : b;//将c赋值a、b中的较大值。

(14)赋值运算符(=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=、!=)

例如:a+=10;//等价与 a=a+10