1.操作符分类
算术操作符: + - * / % 复制代码
移位操作符: << >> 复制代码
位操作符: & | ^ 复制代码
赋值操作符: = += -= *= /= %= &= ^= & * 复制代码
单目操作符: sizeof ! ++ -- 复制代码
关系操作符: > >= <= < != == 复制代码
逻辑操作符: && || 复制代码
条件操作符: ?: 唯一的一个三木操作符 复制代码
逗号表达式: . 复制代码
下标引用,函数调用和结构成员: [] () . -> 复制代码
/ -除号操作符
对于除号操作符:
1.两边都是整数:执行整数除法,与保存的类型无关
int main() { int a = 0; int b = 0; int c = 0; printf("输入两个操作数:->\n"); // 5 2 scanf("%d %d", &a, &b); c = a / b; printf("结果为: %d\n", c); // 2 return 0; } 复制代码
//若接收类型为double类型 int main() { int a = 0; int b = 0; double c = 0; printf("输入两个操作数:->\n"); // 5 2 scanf("%d %d", &a, &b); c = a / b; printf("结果为: %lf\n", c); // 2.000000 并不是2.500000 return 0; } 复制代码
% - 取模操作符
对于取模操作符:%操作符两边元素只能为整形
int a = 10; int b = 3; int c = a % b; 复制代码
int a = 10; double b = 3; int c = a % b;//err 复制代码
int a = 10; int b = 3; double c = a % b; //接收类型可以为其他类型 复制代码
A % B : 最终得到的值小于B
所以:
rand():产生随机数的函数-通常配套srand()函数:随机数生成器使用
(具体内容看分支与循环猜数字游戏)
-->srand(unsigned int)time(NULL) //拿时间戳作为参数
生成的随机数范围:0-32767
所以若要得到0-99的数:rand() %100
若要得到1-100的数:rand()%100 +1
<< >> 左移右移操作符
<< 左移操作符
>> 右移操作符
移动的是二进制位(补码) --只针对整形
左移操作符 <<
左边丢弃,右边补0
左移相当于数值乘2
int c = 4; c << 1; printf("%d\n",c); //4还是8? //4 原因:并没有接收c << 1的值 //若想结果位8 c = c<< 1; printf("%d\n",c); //8 复制代码
右移操作符 >>
情形1:逻辑右移:左边用0填充,右边丢弃 情形2:算术右移:左边补符号位,右边丢弃 复制代码
当前VS2019采用的是算术右移
int a = 1; // 00000000 00000000 00000000 00000001 --原码 //正数:原反补相同 //若采取的是逻辑右移 // 00000000 00000000 00000000 00000000 -补码 //最高位为符号位:0,正数 原反补相同 //对应原码为:00000000 00000000 00000000 00000000 -打印结果为0 a = a >> 1; printf("%d\n",a); //0 复制代码
//err写法 int a = 15; int b = a >> -1; //C语言标准未被定义的写法 复制代码
注意:左移/右移操作数只能为整形,不能为浮点数
float c = 4,5f; c >> 1; //err 复制代码
补码为全1 -> %d打印 表示-1
补码求补码 ->原码
关于 & | ^
只能用在整形数据(正数,负数都可以)!
& 按位与
1001 &1111 ----- 1001 //对应比特位进行按位与运算 有0则为0 两个比特位都为1,结果才为1 复制代码
| 按位或
1001 |1111 ----- 1111 //对应比特位进行按位与运算 有1则为1 两个比特位都为0,结果才为0 复制代码
^ 按位异或
1001 ^1111 ----- 0110 //对应比特位进行按位异或运算 对应比特位相同为0 不同为1 复制代码
使特定位翻转,即异或上该特定位为1,其它位为0的二进制序列
如: X: 1100 0011 使倒数第三个二进制位翻转 使1100 0011异或上0000 0100 ==> 1100 0011 ^0000 0100 ---------- 1100 0111 ==>这样的话就使X的倒数第三位翻转了 复制代码
使特定位翻转: 对应X要翻转的比特位,该数的对应位为1,其他位为0,次数与X对应位异或即可 如:X = 10101110 使X的低4字节位翻转, X ^ 0000 1111即可 ==>1010 1110 ^0000 1111 ==>1010 0001 ->x的低4位翻转了 复制代码
2.如何得到二进制序列最后一位比特位是1还是0
首先,整形在内存中以补码形式存储
方法:只需要让该位按位与上1,即可得知最后一位比特位是0还是1
若最后一位比特位为1:结果为1 否则为0
1的二进制序列: 00000000 00000000 00000000 00000001
符号位为0,正数:原反补相同
其他位比特为0,所以和比特位相于的结果为0
int a =15; // 00000000 00000000 00000000 00001111 ->a的补码 //&00000000 00000000 00000000 00000001 ->1的补码 -------------------------------------- // 00000000 00000000 00000000 00000001 ->结果为1 //即a的最后一位比特位为1 复制代码
int main() { int a = 0; int b = 0; scanf("%d",&b); a = b &1; printf("%d补码的最后一位比特位是%d",b,a); } 复制代码
今天就先到这吧~感谢你能看到这里!希望对你有所帮助!欢迎老铁们点个关注订阅这个专题! 同时欢迎大佬们批评指正