C++运算符

发布时间 2023-11-09 14:58:43作者: 长弓令山

1、按位取反运算符 " ~ "

  ~1 = -2

  ~00000001(补码) = 11111110(补码)         —— 按位取反

  11111110(补码) = 11111101(反码)    —— -1

  11111101(反码)= 10000010(机器码)   —— 除去符号位,按位取反

  10000010(机器码)= -2          

 

2、左移运算符 " << "

  补码按位左移,右侧补0

  -1<<2 = -4

  10000001(机器码) = 11111111(补码)

  11111111<<2 = 11111100(补码)

  11111100(补码)= 11111011(反码)

  11111011(反码)= 10000100(机器码)

 

3、右移运算符 " >> "

  补码按位右移,正数左侧补0,负数左侧补1

  -1>>2 = -1

  10000001 (机器码) = 11111111(补码)

  11111111(补码)>> 2 = 11111111(补码)

  11111111(补码) = 11111110(反码)

  11111110(反码) = 10000001(机器码)

  10000001(机器码)= -1

 

注:机器码、反码和补码转换

  正数的机器码、反码和补码都是机器码本身;

  负数的机器码、反码和补码之间的转换:

  机器码 (按位取反)--> 反码 (+1)--> 补码

  补码(-1)--> 反码(按位取反) --> 机器码 

 

4、运算符优先级

  运算符优先级为从右到左的运算符有:

  (1)一元运算符:+ - ! ~ ++ - - (type)* & sizeof 

  (2)条件运算符:?: 

  (3)赋值运算符:= += -= *= /= %=>>= <<= &= ^= |=

  运算符优先级为从左到右的运算符有:

  (1)逗号运算符:,

   逗号运算符会顺序执行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。