c语言为什么除法会四舍五入,C语言学习(2)

本文介绍了C语言中的运算符,包括除法、取余运算及其规则,如整数相除向下取整,浮点数除法不精确。还详细阐述了逻辑运算符和位运算符的使用,例如按位与、按位或、按位异或及移位操作。此外,文章提供了实例代码来解释这些运算符的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言代码编写规范

第一个:注意缩进

用tab键缩进对齐

第二个:适当的空行

第三个:注释,简明扼要

C语言注释只有两种写法:

第一种:单行注释    //注释文字

第二种:块注释  /*  注释的内容  */,块注释不能嵌套

尤其是重要的核心代码必须写注释

第四个:命名,通俗易懂,英文,千万不要用拼音

C语言中的运算符

算术运算符   +   -   *    /    % (取余)

关系运算符    >    =    <=

逻辑运算符    ||逻辑或     &&逻辑与    !逻辑非

指针运算   *    &

三目运算符    ?:

求数据类型大小,变量大小    sizeof

位运算           &   |    ~   ^

组合运算       +=   -=   *=   \=      &=   |=

移位运算        >>   <<

自增自减       ++    --

(1) 除法

情况一:

两个整数相除,结果取整,而且不会四舍五入

情况二:

除法运算中有一个是小数

1/2  --》结果不是0.5  是0

16/3 --》5

2/3 --》

#include

intmain()

{//int a=1/3;

int a=2/3;float b=2/3;float c=2.0/3; //2/3.0 2.0/3.0

int d=2.0/3;

printf("%d\n",a);

printf("%f\n",b);

printf("%f\n",c);

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

}

结果如下:

0

0.000000

0.666667

0

(2)取余,计算余数

只能用于整数运算     15%2  余数1

15.0%2  不对的,小数不能参与取余运算

实际开发作用:

除法和取余配合实现获取一个数的各个位

任意输入一个整数,编程得到这个整数总共多少位,各个位分别是多少

7545

(3)逻辑运算,跟条件判断配合在一起使用

if(a>b)

数学中:   10

C语言中: if(x>10 && x<100)

if(姓名==zhang || 姓名==王)  //或者

if(姓名==zhang && 富二代)  //并且

重点:区分==和=

==用来判断变量是否相同   if(a==b)

= 赋值运算符号

C语言规定的真和假

非零就是真 1   18   -9

零就是假

表达式一 || 表达式二 ||  表达式三   //从左到右,有一个条件为真,后面的都不用运算了,整个表达式都为真

表达式一 && 表达式二 &&  表达式三  //从左到右,有一个条件为假,后面的都不用运算了,整个表达式都为假

if(有房&&有车&&帅)

逻辑非     真--》假

假--》真

#include

intmain()

{int a=78;int b=8;if(!(a

printf("a>b\n");

}

结果如下:

a>b

(4) 三目运算符

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

判断表达式1是否为真

为真 --》执行表达式2

为假 --》执行表达式3

#include

intmain()

{inta,b;

printf("请输入两个整数!\n");//scanf("%d",&a);//获取键盘输入整数保存到变量a的地址中//scanf("%d",&b);

scanf("%d%d",&a,&b);//用三目运算符比较他们的大小

int ret=(a>b)?a:b;

printf("%d和%d中较大的一个数是:%d\n",a,b,ret);

}

结果如下:

请输入两个整数!

15

2015和20中较大的一个数是:20

(5)位运算(重点)

对整数的二进制进行运算

按位与 &    只要有一个是0结果就是0,全部都是1,结果就是1

比如:  18&16结果是多少?    int  a=89; int b=96;   a&=b;  //等价于 a=a&b;

18 --》二进制  10010

16 --》二进制  10000

10000

特点:  任意一个整数要求把它的第三位二进制置0,其它位不允许改变

125--》二进制1111101 --》最终希望的结果1111001

1111101  --》125

1111011  &

1111001

任何二进制位跟1进行按位与运算结果保持不变

任何二进制位跟0进行按位与运算结果一定是0

按位或 |     只要有一个是1,结果就是1,全部都是0,结果就是0

比如:  18|16结果是多少?

18 --》二进制  10010

16 --》二进制  10000

10010

特点:实际开发中,用位或运算去设置某一位二进制为1

int a=785;

785

00000.....100  或

任何二进制位跟0进行按位或运算结果保持不变

任何二进制位跟1进行按位或运算结果一定是1

按位异或 ^   相同为0,相异为1

比如:  18^16结果是多少?

18 --》二进制  10010

16 --》二进制  10000

00010

特点:实际开发中我想把某个数的二进制取反

比如:  int  a=785  第三位二进制取反

785

0000........100      异或

一个数跟自己异或,结果为0       a^a结果为0

异或满足交换律                           a^b^a等价于  a^a^b

一个数跟0异或,结果保持不变    a^0结果为a

按位取反 ~   0变成1    1变成0

比如: ~18结果是多少?

18 --》二进制  10010

~18 --》          01101

(6)组合运算(复合运算)

+=      a+=10; //等价于   a=a+10;

(7)移位

左移  <

18<<2;  //18左移2位

0000000000.........10010<<2

特点:一个数左移n位,相当于乘以2的n次方

右移  >>   把一个整数的二进制整体向右移动若干位,高位补什么??

算术右移:  高位补符号位

逻辑右移:  高位补0

特点:一个数右移n位,相当于除以2的n次方

(8)自增和自减

a++   后置++    先使用a原本的值,然后再把a加1赋值给自己

++a   前置++    先把a加1,然后再使用加一之后的a

a--     后置--    先使用a原本的值,然后再把a减1赋值给自己

--a     前置--    先把a减1,然后再使用减一之后的a

#include

intmain()

{int a=78;//int b=a++;//后置++

int b=++a; //前置++

int c=a++;

printf("b is:%d a :%d c:%d\n",b,a,c);

}

结果如下:

b is:79 a :80 c:79

练习:

1.      float  a=1.6;

if(a==1.6)   //请问这个条件是否成立,为什么

#include

intmain()

{float a=1.6; //不能精准表示,整数部分和小数部分

float b=1.5; //可以精准表示

if(b==1.5)

printf("b==1.5\n");elseprintf("b!==1.5\n");if(a==1.6) //某些小数在计算机中是无法精准表示的//左边的a是个变量,它里面存放的是1.6的二进制的近似值//右边的1.6是个常量,精度高一些

printf("a==1.6\n");elseprintf("a!==1.6 a is:%f\n",a);

}

结果如下:

b==1.5a!==1.6 a is:1.600000

2.      int  a=10;

int  b=6;

if((a<2)||(b=18))

printf("a ,s:%d    b  is:%d\n",a,b);

if((a<12)&&(a>b)&&(a=96))

printf("a ,s:%d    b  is:%d\n",a,b);

#include

intmain()

{int a=10;int b=6;if((a<2)||(b=18)) //判断a<2或者18赋值给b

printf("a is:%d b is:%d\n",a,b);if((a<12)&&(a>b)&&(a=96))

printf("a ,s:%d b is:%d\n",a,b);

}

结果如下:

a is:10 b is:18

3.     用三目运算符实现三个整数求最大值

#include

intmain()

{inta,b,c;

printf("请输入三个整数!\n");

scanf("%d%d%d",&a,&b,&c); //scanf("%f",&m);//分步骤写

int firstmax=(a>b)?a:b;int max=(firstmax>c)?firstmax:c;//合并写//int result=((a>b)?a:b)>c?((a>b)?a:b):c;

printf("最大值result is:%d\n",max);

}

结果如下:

请输入三个整数!

5

9

4最大值resultis:9

总结按位或,按位异或的特点

完成任意一个整数m,要求把它的第三位二进制置零,置一,取反,其它二进制位不允许改变

将这个数&0xfffb,将第三位置0;

将这个数|0x0004,将第三位置1;

将这个数^0x0004,将第三位取反;

ffc2594c509b72bc8e8b836fb83d50f9.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值