c语言学习笔记7之基本运算符

来源:互联网 发布:苏宁秒杀软件哪个好 编辑:程序博客网 时间:2024/05/22 03:03
当我们有1之后就会产生2,继而产生之后的一些数字,由此产生了加减乘除的运算,c语言中的运算也包括这些,而且还产生了一些运算的变体。1.算数运算1)+、-、*2)/、%整数相除,取整数部分。11%5=商2,余1/和%不能对整数0进行操作,否则会中断程序。但是可以对浮点0进行操作,但是得到的结果是inf,表示无穷大。%不能对浮点数使用。/向零取整(取更接近0的数字)。%的结果与其左操作数的符号一致。2.赋值运算1)将赋值运算符右边的值付给左边的变量。// = int a;a = 5; // 将5赋给a2)赋值表达式的值就是赋值表达式左操作数的值。int a, b, c;a = b = c = 5; // a = (b = (c = 5));printf ("%d,%d,%d\n", a, b, c); // 5,5,53)赋值运算符的左操作数必须是一个左值——可被赋值的对象——变量,常量或表达式不能被赋值。100 = 200; // error100 = a; // errora + b = c; // error4)赋值运算符是“=”而不是“==”。5)赋值运算符还可和其它运算符结合起来使用,构成复合赋值。a += b; // a = a + ba %= b; // a = a % b6)初始化与赋值是不同的。int a = 10; // 初始化 //int a;a = 100; // 赋值3.自增减运算1)++/--:变量自增/减1。int a = 10;a++; // a:11a--; // a:10++a; // a:11--a; // a:102)不能用于常量。10++; // error--10; // error3)可以用于所有的整型类变量,以及浮点类,但是多数情况下用于int。4)前后缀自增减的区别:前缀:先自增减,在计算表达式。++a后缀:先计算表达式,再自增减。a++a++表达式和++a表达式的值都是从操作数a的内存空间中得到的。二者的区别在于,一个是先取表达式的值再自增,另一个是先自增在取表达式的值。5)忠告:自增减运算最好不要在一个表达式中使用多次。1.关系运算>/>=/</<=/==/!=关系运算表达式的值是整数:1或者0。逻辑真:12.逻辑运算1)逻辑与(&&)、逻辑或(||)、逻辑非(!)A && B:只有当A和B的值都为真(非零)时,表达式的值才为真。A || B:只有当A和B的值都为假(零)时,表达式的值才为假。! A:当A的值为真时,表达式的值为假,当A为假时,表达式的值为真。2)短路运算A && B:如果A的值为假,则B不处理。A || B:如果A的值为真,则B不处理。3.位运算1)位与(&)/位或(|)/位异或(^)/位反(~)位与:参与运算的两位都是1结果为1,否则为0。位与可以置某一位为0,也可以得到某一位的值。    10110001 A    11101111 B&)-----------    10100001 C          ^    10110001 A    00010000 B&)----------- 若A&B==B,则A中此位为1    00010000 C          ^位或:参与运算的两位都是0结果为0,否则为1。位或可以置某一位为1,也可以得到某一位的值。    10100001 A    00010000 B|)------------    10110001 C          ^    10100001 A    11101111 B|)------------ 若A|B==B,则A中此位为0    11101111          ^异或:参与运算的两位相异为1,相同为0。异或可以翻转某一位,想翻哪位哪位就是1,其余为0。    10101010 A    00100100 B^)------------    10001110 C        ^    ^A^B->CC^B->AC^A->B异或还可用于在不增加第三变量的前提下,交换两个变量的值。int a = 100, b = 200;int c = a;a = b;b = c;--------------------a : 1011  11b : 0110  6a = a ^ b; // a : 1101  13b = a ^ b; // b : 1011  11a = a ^ b; // a : 0110  6位反:按位取反    01100001~)-----------    100111102)左右移位A.有符号数:左移补零,右移补符10101010 << 1 -> 01010100-86                           -17210101010 >> 1 -> 11010101-86                           -43B.无符号数:左移右移全补零10101010 << 1 -> 01010100170                          8410101010 >> 1 -> 01010101170                          85在不发生溢出的情况下,左移一位即乘2,右移一位即除2。00000010 << 1 -> 000001002                 4int main(){int sec;int h,m,s;printf("请您输入一个秒数:");scanf("%d",&sec);if(sec<=0){printf("时间不存在零或负数!");return 0;}   h=sec/3600;   m=sec%3600/60;   s=sec%60;   printf("%2dh:%2dm:%2ds:\n",h,m,s);return 0;}




0 0
原创粉丝点击