负数二进制计算方法
整数二进制先做按位求反然后再加1.
62 = 32 + 16 + 8 + 4 + 2
= 0011 1110
-62 = 1100 0001 + 1
= 1100 0010
已知某个二进制数字,也可以采用上述方法计算出相反数的二进制。
某个数据类型中最小的负数的二进制形式是一个1右边全是0,例如char类型的最小负数二进制是1000 0000
一个有符号类型变量中最左边的二进制位称为符号位,如果是负数则符号位一定是1.
变量中首个二进制位为1不能说明正负,需要结合类型有无符号判断。
C语言中支持加减乘除四则运算符
%表示取余操作符
赋值操作符优先级很低但是比,优先级高
多个赋值操作符从右向左计算
赋值操作符左边必须是变量
复合赋值操作符(例如+=,-=,*=,/=等)优先级和赋值操作符一样
自增和自减操作符用于对变量内容做加一减一操作
自增和自减操作符只能对变量进行操作
前自增和前自减的优先级几乎是最高的
后自增和后自减的优先级几乎是最低的
不要在一条语句中对同一个变量做多次自增或自减计算(*)
逻辑表达式的结果只能是真或假
C语言中0代表假,1代表真
逻辑操作符用来编写逻辑表达式
等于(==),不等于(!=),大于(>),大于等于(>=),小于(<),小于等于(<=)
所有整数数字都可以当逻辑表达式使用。0对应假,其他所有整数都对应真。
!也是一个逻辑操作符,表示求反。
bool表示布尔类型,只包含true和false两个数值。需要在文件中加入如下语句
#include <stdbool.h>
逻辑操作符的优先级比算数操作符低
与(&&)和或(||)都可以用来把两个简单逻辑表达式合并成一个复杂逻辑表达式
两个逻辑表达式都是真则用&&连接后得到的表达式才是真
只要两个逻辑表达式中有一个为真则用||连接以后的表达式就是真
逻辑表达式练习:
1.考试成绩在70到79之间的逻辑表达式
2.考试成绩在90到100之间的男生或60以下的女生
&&和||都具有短路特征(如果前一个表达式能决定最终结果则不会计算后一个表达式)
位运算符(针对二进制计算)
按位与(&)
0 & 0 0
0 & 1 0
1 & 1 1
3 & 5 = 0000 0001 = 1
用于把某些二进制位清0
按位或(|)
0 | 0 0
1 | 0 1
1 | 1 1
3 | 5 = 0000 0111 = 7
用于把某些二进制位设置1
按位异或(^)
0 ^ 0 0
1 ^ 1 0
0 ^ 1 1
3 ^ 5 = 0000 0110 = 6
用于把某些二进制位求反
移位操作符
左移(<<)和右移(>>)
左移时空位置补0
3 << 2 = 0000 1100
右移时有符号类型空位置补符号位
无符号类型空位置补0
-16 >> 2 = 1111 1100
右移一位相当于除以2
左移一位相当于乘以2
按位求反(~)
把二进制中的每个数位变成相反
~(-2) 1
&可以获得变量地址,例如&num
*可以根据地址数据找到变量,例如*(&num)
三目运算符(? :)
可以根据一个逻辑表达式的结果从两个计算公式中选择一个执行。
逻辑表达式为真时对应的计算公式写在前面
/*
三木操作符练习
*/
#include <stdio.h>
int main() {
int num = 0, value = 0;
printf("请输入一个数字:");
scanf("%d", &value);
num = value >= 0 ? num + 1:num - 1;
printf("计算结果是%d\n", num);
return 0;
}