1前置加加和后置加加的区别,以及逗号表达式的解释
++运算符:分为前置++和后置++,
前置++:先加1,后使用,即先使用变量中内容,然后给结果加1
后置++:先使用变量中内容,整个表达式结束时,给变量加1
逗号表达式,取最后一个表达式的值。
例子
#include <stdio.h> int main() { int a, b, c; a = 5; c = ++a; b = ++c, c++, ++a, a++; b += a++ + c; printf("a = %d b = %d c = %d\n:", a, b, c); return 0; }
计算其中a,b,c的值
c = ++a;// ++a:加给a+1,结果为6,用加完之后的结果给c赋值,因此:a = 6 c = 6
逗号表达式优先级最低,这里先算b=++c;此时b=7;c++和++a,a++在结束时会给c+1;a+2,此时
a=8,c=8;
b+=a++ +c;相当于8+8+7=23;
2移位操作符
移位操作符只能对整数操作
<<左移操作符
>>右移操作符
#include<stdio.h> int main() { int a = 5; //把a在内存中存储的二进制位向左移动两位 int b = a << 2; printf("%d", b); return 0; }
输出为20
00000101-->00010100
3 整数在二进制中的规则
整数有3种二进制的表示形式
原码,反码,以及补码
正整数--原,反,补相同
负整数--原,反,补不同,需要计算
1个字节占8个位,整型是4个字节,有32个位
负数的反码是原码的第一位不变,因为第一位是符号位,然后其余按位取反
int a = -5; 100000000000000000000000000000000101--原码 111111111111111111111111111111111010--反码 反码的二进制序列加1,就是补码 111111111111111111111111111111111011--补码
整数在内存中存储中存储的是补码!!!
printf在打印或使用的时候,用的是原码的值
4右移操作符:
1:算数右移
2:逻辑右移
到底右移是算数还是逻辑右移取决于编译器
我们常见的编译器都是算是右移