前言🚩
学了这么长时间的C语言,我也刷了不少的题目,其中每到遇见关于操作题这样的概念类型的选择题我都要标记一下,或者直接瞎选一个。现在趁着刚刚考试完期末周的劲头还没有过去,硕硕就赶紧复习加上查找资料创作出来了一篇关于C语言操作符的博客。各位看官坐稳扶好了,我们要发车了🥰🥰
一、原码、反码、补码的基础概念
在要学习下面的位操作符之前,让我们先了解原码、反码和补码的概念。对于一个数计算机要使用一定的编码方式进行存储,原码、反码、补码是机器存储一个具体数字的编码方式。
1.原码
🍔原码就是符号位加上真值的绝对值,即:用第一位表示符号,其余位表示值。
比如:如果是8位二进制:
[+1] 正一的原码 = 0 000 0001
[-1] 负一的原码 = 1 000 0001
🍪第一位是符号位
🥝因为第一位是符号位,所以8位二进制数的取值范围就是:(即第一位不表示值,只表示正负。)
[1111 1111 , 0111 1111] 即 [-127 , 127]
💧总结一句话:原码是人脑最容易理解和计算的表示方式。
2.反码
🍔反码的表示方法是:正数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各个位取反。
值 | 原码 | 反码 |
+1 | 0 000 0001 | 0 000 0001 |
- 1 | 1 000 0001 | 1 111 1110 |
💧可见如果一个反码表示的是负数,人脑无法直观的看出来它的数值。通常要将其转换成原码再计算。
3.补码
🍔补码的表示方法是:正数的补码就是其本身,负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。(也即在反码的基础上+1)
值 | 原码 | 反码 | 补码 |
+1 | 0 000 0001 | 0 000 0001 | 0 000 0001 |
- 1 | 1 000 0001 | 1 111 1110 | 1 111 1111 |
💧对于负数,补码表示方式也是人脑无法直观看出其数值的。通常也需要转换成原码再计算其数值。
二、原码、反码、补码的计算方法
1.原码
🍪原码:将最高位作为符号位(0表示正,1表示负),其它数字位代表数值本身的绝对值的数字表示方式。
2.反码
🍪反码:如果是正数,则表示方法和原码一样;如果是负数,符号位不变,其余各位取反,则得到这个数字的反码表示形式。
3.补码
🍪补码:如果是正数,则表示方法和原码一样;如果是负数,则将数字的反码加上1(相当于将原码数值位取反然后在最低位加1)。
三、算术操作符
🍔算数操作符一共有五个
1、+(加)
2、-(减)
3、*(乘)
4、/(除)
5、%(取模)
🔴1. 除了 %(取模) 操作符之外,其他的几个操作符可以作用于整数和浮点数。
🔴2. 对于 / (除)操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
🔴3. % (取模)操作符的两个操作数必须为整数,返回的是整除之后的余数。
四、移位操作符
<< | 左移操作符 |
>> | 右移操作符 |
🚨注:移位操作符的操作数只能是正数。
🚨注:移位操作符的操作数只能是整数。
1. 左移操作符
🍟移位规则:左边抛弃、右边补0
2. 右移操作符
🍟移位规则:
首先右移运算分两种:
⭕ 逻辑移位
⭕ 算术移位
(1) 逻辑移位
左边用0填充,右边丢弃
(2) 算术移位
左边用原该值的符号位填充,右边丢弃
警告🚨
对于移位运算符,不要移动负数位,这个是标准未定义的。
例如:
int num = 10; num>>-1;//error