大数据学习--day03(运算符、流程控制语句)

运算符、流程控制语句

自增自减容易出错的地方:

扩展的赋值运算符
 a+=b 等同于 a = a+b;
 扩展的赋值运算符 隐含了一个类型的强制转换

 & && 有何区别

  & : 当左边的表达式结果为false时 , 仍旧判断执行右边的表达式
  && :当左边的表达式结果为false时 , 不去判断执行右边的表达式

 | || 有何不同之处

  | : 当 左边的表达式结果为 true 时 , 仍然会对右边的表达式进行 执行判断
  ||: 当 左边的表达式结果为 true 时 , 不会会对右边的表达式进行 执行判断

三目运算符:

位运算符

 只能操作整型
 使用位运算符时 会把 byte char short 先自动提升到 int

 << 左移

  x << y 等价于 x * 2^y

 >> 右移

   x >> y 等价于 x / 2^y
 
 例如 
    5 >> 1 == 5 / 2^1
    0 0000101 5
    0 0000010 右移一位 前面补的是符号位 -> 2
    0 0000001 右移二位 前面补的是符号位 -> 1
 
负数右移
    1 0000101 -5 补码
    1 0000100 反码
    1 1111011 原码 
    
    1 1111101 原码右移一位 补符号位
   反码1 0000010
   补码1 0000011 == -3
    1 1111110 原码右移二位 补符号位
   反码1 0000001
   补码1 0000010 == -2
 

 >>> 无符号右移

  之前的 >> , 正数负数补的是符号位 , 无符号右移补 0
  >>> >> 如果操作的正数 , 那么完全一样 , 操作的负数 差距很大
 
  -5 >>> 1 == 2147483645 
  
  1 24个0 0000101 -5补码
  1 24个0 0000100 -5反码
  1 24个1 1111011 -5原码
  0 24个1 1111101 右移一位 补0
   得出结果 2147483645
 
if语句同c#不讲了
原文地址:https://www.cnblogs.com/symkmk123/p/9634384.html