1. 操作符的分类
一、算术操作符
要理解移位操作符,首先要理解二进制的源码、补码、反码。
源码:
一个数以二进制表现出来的数字,但要有32位,其中第一位表示正负,1表示负的,0表示正的。
例如:3的二进制表示为 00000000000000000000000000000011
-4的二进制表示为 10000000000000000000000000000100
反码:
正数的反码跟源码相同。
负数:将源码中的符号位不变,其他位置1变成0,0变成1即可。
例如: -4的反码为 111111111111111111111111111111011
补码:
正数的补码和源码相同。
负数;将反码后加一即可。
例如:-4的补码为 111111111111111111111111111111100
注意:计算机储存数据就是以补码的形式存在(计算机只会算加法,用补码形式存在于,有利于计算机的计算)
总结:
1、正数的源码、补码、反码都相同。
2、负数从源码到补码要取反加一,从补码到源码也要取反加一即可
3、第一位数为符号位,一共有32位数。
二、移位操作符
“<<”:左移操作符
规则:左边抛弃,右边补0
例如:num<<1,表示num左移一位
“>>”: 右移操作符
规则分为两种:
1. 逻辑右移:左边⽤0填充,右边丢弃。
注意:对于移位运算符,不要移动负数位,这个是标准未定义的,这些操作都是介于计算机储存数据的补码的运算。
右移操作符的规则是哪种,主要取决于集成环境,软件的不同所使用的规则也不同。
总结:
1、左移的规则只有一种,右移规则有两种
2、“<<”和 “>>”符号后面是几代表移动几位。
三、位操作符
“&”:按位与
规则:有0取0,无0取1
“|”:按位或
规则:有1取1,无1取0
“^”:按位异或
规则:相同取0,相异取1
“~”:按位取反
规则:1变0,0变1
例如:
注意: 这些操作都是介于计算机储存数据的补码的运算,并且操作的数都必须为整数。
总结:
1、“&”可以计算出有几个一。
#include <stdio.h>
int main()
{
int num = -1;
int i = 0;
int count = 0;//计数
while(num)
{
count++;
num = num&(num-1);
}
printf("⼆进制中1的个数 = %d\n",count);
return 0;
}
2、“^”可以不建立第3个变量的情况下将变量进行变换。
1 #include <stdio.h>
2 int main()
3 { 4 int a = 10; 5 int b = 20; 6 a = a^b;
7 b = a^b;
8 a = a^b;
9 printf("a = %d b = %d\n", a, b);
10 return 0;
11 }
四、赋值操作符
“=”:与数学中的等号相同。
“+=”、“-=”、“*=”、“/=”、“%=”、“<<=”、“>>=”、“&=”、“|=”、“^=”:将自身进行计算,然后赋值给自身。
例如:
五、单⽬操作符
“++”、“--”:
规则有两种:
1、前置++(--):先计算,后赋值
例如:
2、后置++(--):先赋值,后计算
例如:
“!”:非,即不的意识
例如:a!=0,判断a是否不等于0.
六、关系操作符
“>”、“<”、“>=”、“<=”、:大于,小于,大于或等于,小于或等于,跟数学里一样判断大小关系。
“==”、“!=”:等于,不等于,即判断两个数是否等于,或者不等于。
七、逻辑操作符
“&&”:逻辑与运算符
规则:就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
例如:
“||”:逻辑或运算符
规则:就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。
例如:
总结:
1、“&&”两个条件都为真才为真。
2、“||”一个条件为真即为真。
八、逗号表达式
注意:每个表达式都进行计算,但是计算的结果由最后一个表达式决定。
九、下标引⽤
“[]”:
操作数:⼀个数组名 + ⼀个索引值(下标)
例如;
十、函数调用
“()”:
注意: 函数操作符最少有一个操作数:函数名。
十一、结构成员访问
1 结构体
十二、操作符的属性
优先级:
如果⼀个表达式包含多个运算符,哪个运算符应该优先执⾏。各种运算符的优先级是 不⼀样的。
结合性:
如果两个运算符优先级相同,优先级没办法确定先计算哪个了,这时候就看结合性了,则根据运算符是左结合,还是右结合,决定执⾏顺序。⼤部分运算符是左结合(从左到右执⾏),少数运算符是右结合(从右到左执⾏)
结束语
希望这篇文章能让您对C语言有了更深入的了解,感受到编程的魅力所在。C语言,作为计算机编程的基石之一,它的强大和灵活使得它成为了众多程序员的首选。通过学习和掌握C语言,我们不仅可以编写出各种实用的程序,更能够深入理解计算机底层的工作原理,开拓我们的视野和思维。
然而,学习C语言并不是一蹴而就的事情,它需要我们不断地实践和探索。在编程的道路上,我们会遇到各种各样的挑战和困难,但是只要我们坚持不懈,就一定能够攻克难关,实现我们的编程梦想。
最后,感谢您的阅读和陪伴。如果您对C语言还有其他问题或者想要了解更多关于编程的知识,欢迎随时与我交流。让我们一起在编程的世界里畅游,创造更多的精彩和可能!