标签:逻辑 读取 col 个数 == 运算符 类型 blog 规范
算术运算符:
% 取模运算 可以得到两个数相除的余数
++example 前++
int b = ++a; //相当于a= a+1;b=a;a自增处理完后再把值赋给int数据类型b变量
int a = 13; int b = ++a; //前加加 由a = a+1;b = a; 推出int a = 14,int b = 14;
example++ 后++
int b = a++; //相当于b = a;a = a+1;a赋值给变量b之后a自增
int a = 13; int b = a++; //后加加 由b = a;a = a+1; 推出int b = 13,int a = 14;
编译出错 意外类型
int b = ++(++a)--; /*
前后加加有规范,不能随心所欲 处于栈空间不稳定状态,无法读取a类型以及具体数值,确定不了类型于是报出:意外类型错误 */
自减同理
+=、-=、/=、%=、&=、|=、>>=、<<=、^=:
a += b;//即a = a + b;
以此类推
>、<、==、>=、<=、!= 大于、小于、等于、大于等于、小于等于、不等于
用于判断逻辑关系的运算符
&& 与
true && false //false true && true //true
|| 或
true || false //true true || true //true
! 非
!true == false //false !false == true //true
总结:
与 全真才是真
或 只要有一个条件为真即是真
非 结果取反
按位与运算符 &
0 & 0 = 0;0 & 1 = 0; 1 & 1 = 1;
3 & 6
0011 & 0110 = 0010
3&6=2
按位或运算符 |
0 | 0 = 0; 1 | 0 = 1; 1 | 1 = 1; 3 | 6 0011 & 0110 = 0111 3 | 6 = 7
按位异或运算符 ^
0 ^ 0 = 0; 1 ^ 0 = 1; 1 ^ 1 = 0; 3 ^ 6 0011 ^ 0110 = 101 3 ^ 6 = 5 3^6^3 = 6 3^6^6 = 3
取反运算符 ~
~1 = 0; ~0 = 1;
对一个二进制按位取反,即0变1,1变0
左移运算符 <<
1 << 2
0001 << 2 = 0100 = 4
左移向右补0,每左移1位相当于改数乘以2
右移运算符 >>
4 >> 2 0100 >>2 = 0001 = 1 右移向左补0,操作数每右移1位,相当于该数除以2 -5 >> 2 负数的二进制: 先取正值的原码,再进行按位取反操作,再进行加1操作.(负数的补码就是负数的原码,并不考虑正数的原码反码补码都是其本身) 0000,0101 ->1111,1010->1111,1011
得到负数补码后,负数左补1右边溢出位数将舍弃,将再补码减1,得到负数反码,再进行按位取反得到正数原码,正数原码再转成十进制,得到正数十进制数后,再向其取相反数. 1111,1011 >> 2 = 1111,1110->1111,1110-1->1111,1101->0000,0010->2->(-2)
无符号右移运算符 >>>
-5>>>2
无符号位右移 按照数值类型位长,进行向左补0,移出的右边位被丢弃
11111111,11111111,11111111,11111011->00111111,11111111,11111111,11111110
00111111,11111111,11111111,11111110=1073741822
没有无符号左移,因为左移至始至终是在右补0,不会产生符号问题;
也就是左移不能改变一个数的正负性质。
右移取决前面的符号位0或者1,右移正负数性质会产生补0或1的问题;
无符号右移因为向左补0,改变了符号位,则会将负数转换成正数性质。
标签:逻辑 读取 col 个数 == 运算符 类型 blog 规范
原文地址:http://www.cnblogs.com/realjanushu/p/7532993.html