运算符
&&逻辑与:全真为真,一假则假
||逻辑或:一真则真,全假则假
!逻辑非:非真即假,非假即真
截断法则
逻辑与:前边表达式结果为假,后边表达式不再执行,直接返回假
逻辑或:前边表达式结果为真,后边表达式不再执行,直接返回真
位运算符
二进制数 1,0
& 位与 全1则1,有0则0
| 位或 有1则1,全0则0
^ 异或 相同为0,不同为1
~ 取反 补码0—>1 1—>0
“<<”左移
“>>”右移
#include <stdio.h>
#include<stdio.h>
int main(int argc, char const *argv[])
{
int a=15;
int b=6;
int c=a&b;
//15:1111
// 6:0110
// &:0110---6
printf("%d\n",c); //6
return 0;
}
负数位运算
整数三种表示形式
正数原码,反码、补码相同
原码:给我们看的
补码:给计算机看的
计算机中整数以二进制的补码形式存储、计算
负数:原码不变 ,反码:源码除符号位,其他按位取反,补码:反码+1
int a=15;
int b=-6;
int c=a&b;
printf("%d\n",c); // 10
int 4字节=32位 1字节=8位
假设按1字节算
15补码:
0000 1111
-6原码: 最左边表示符号位 0正数 1负数
1000 0110
-6反码:
1111 1001
-6补码:
1111 1010
15补码 & -6补码:
0000 1111
1111 1010
0000 1010 补码 ----> 10
<<左移:左移n位,右边补n个0
6<<224 6:110---->11000—>24
6*2^224
-6*2^2 -24
">>"右移:
6>>2 6:110—>1
6/2^21;
-6/2^2 ==-2
运算符优先级
单算移关与,异或逻条赋
单目运算符:++ – ! ~
算术运算符:* / % + -
移位运算符:<< >>
关系运算符:> >= < <= == !=
位与运算符:&
异或运算符:^
位或运算符:|
逻辑运算符:&& ||
条件运算符:?:
赋值运算符: = += -= (乘=) /= %= a-=5;//a=a-5
表达数1? 表达式2 : 表达式3
判断表达式1是否成立,成立执行表达2,否则执行表达式3
int a =15;
int b=6;
int c=a>b?a:b;\\如果a>b的值为真则c等于a,反之等于b
printf("%d\n",c);
进制转换
二进制 0 1 2:10
八进制 0-7 8:010
十进制 0-9
十六进制 0-9 a-f 16:0x10