题主是大一学生,刚刚开始学习python,但是题主有一定的c语言基础,在这里以两者对比的形式做一些学习笔记。
题主想从两者对比中一些比较有趣的地方来写文章,比如这里的运算符在编程语言中并不值得写成一篇文章,但是由于其中能发现python有趣的思想,因此专门写一篇文章聊聊
#基础:常见的运算符号不管何种语言,运算符号的种类其实是大同小异的。
一般分为三种运算符:
算数运算符:用来进行数据计算
比较运算符:用来比较变量,常用来设置条件
逻辑运算符:用来连接多个表达式
##算数运算符
c语言的算数运算符
1.四则运算:+、-、*、/、% 加、减、乘、除、整除取余数。
这里的“/”比较有意思,在除数和被除数都是整型的时候,进行整除运算,有一个是浮点数的时候才会得到分数。
整除运算是取整数部分,不是四舍五入。
一些常见的运算,如乘方开方要引入math.h的头文件
#include
int main()
{
a = 3/2
b = 3.0/2
//a = 1
//b = 1.5
}
而“%”的取余也只在整型数据运算时有效。
加减号在字符运算中是使用两者的ASCII码表对应的数来计算
2.位运算
<<、 >>、 ~、|、&、^
位运算都是以二进制位为单位计算
<<: 左移 在右边补1个0 左移后相当于十进制的数X2
>>:右移 右边扣除一个0 相当于除以2
~:按位取反 比如0110110变成1001001
|:按位或 相同位置上有1则为1
^:按位异或 相同位置相同为0 不同为1
&:按位与 相同位置上有0则为0
3.赋值运算
“=” 把等号右边的赋值给左边的,左边的一定要是变量
python的算数运算符
1.基础运算
+、-、*、%在python中都和c语言一样。
python的加号在字符中可以用于连接字符串
除法运算比较有意思python有两个除法“/”和“//”
"/"是符合数学逻辑的除法,无论除法参与的数据类型为何,得到的都是数学上的结果。
“//”对应c语言的“/”,进行整除运算
另外,python有“**”的运算符进行乘方运算(乘方数是小数时开方)
2.位运算
和c语言一致
3.赋值运算
也是使用“=”赋值
##比较运算符
两者的符号是一致的
“>“、“<”、“>=”、“<=”、“==”、“!=”
大于、小于、大于等于、小于等于、等于、不等于
但是返回值不同
python返回bool型变量true 和 false
c语言返回整型变量1和0
##逻辑运算符
就是我们常说的与、或、非
与:与连接的表达式有假则为假
或:或连接的表达式有真则为真
非:非+表达式真假取反
c语言的与、或、非分别为:”&&“、”||“、”!“
python则为”and“、”or“、”not“
值得注意的是,逻辑运算中是采用一种偷懒的逻辑
比如或:有真则为真
在判断时(表达式A)and(表达式B),如果A是假的,将不会进行B,这会导致:如果在这里的表达式进行算数或者赋值运算,可能不会运行
如:
b = 0 and a
print(b)
#0
b = 0 or a
print(b)
#报错:‘a’ is not defined
#比较两个语言的运算符
首先,最直观的区别就是python的运算符更加人性化,含义更加直观:
除法运算用”/“来表示数学上的计算、使用英文单词and or not 来表示逻辑也很直观。
加减号在字符中的运算也很方便
其次,是python运算里的一些运算符其实耐人寻味
下面这个例子是题主想把运算符单独拎出来聊的最主要原因
在python中,想要进行数据的对换
a = 1
b = 0
a,b = b,a
#a = 0,b = 1
而c语言中需要是不能计算的
#include
int main()
{
int a = 0;
int b = 1;
a,b = b,a;
printf("%d %d",a,b);
}
//输出0,1
实际上进行的是b = b
c语言中要用一个变量暂存
#include
int main()
{
int a = 0;
int b = 1;
int t;
t = a;
a = b;
b = t;
printf("%d %d",a,b);
}
先看c,c严格执行一个语句一个 *** 作,语句中使用逗号分隔可以连续执行类似的不同 *** 作,但是实际上是有先后顺序的
#include
int main()
{
int a = 0;
int b = 1;
a = b,b = a;
printf("%d %d",a,b);
}
//输出1,1
即使a = b,b = a;写在同一行,也是先后进行的。
python中逗号其实是作为了元组的分隔符,在这个赋值运算时,表达的其实是”把上一步结束时的b,a赋值给这一步的a,b"相当于同时进行了两步 *** 作,这在一个程序中其实是不那么符合逻辑的。
有可能在底层其实是进行了暂存的赋值运算的。
所以,可以猜测python为了达到人性化,牺牲了一定的逻辑的严格性。
参考下图,c语言没有的删去即可
#小结:
python的人性化牺牲了计算机层面的逻辑性,由于很多时候这种逻辑性是反直觉的,笔者作为非计算机专业的学生,感觉牺牲就牺牲了叭哈哈哈哈哈哈哈
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)