今天学习网课学到了按位取反~运算符的知识。重点,易混淆点如下:
1.运算符~取反 与 数学逻辑中的反码不同。
1的原码: 00000001 -1的原码: 10000001
1的取反:11111110 -1的取反:01111110
1的反码:00000001 -1的反码:111111110
2.负数以补码的方式存储在内存中,但打印使用时的是原码。
-1原码:10000001 内存中存储的-1代码/也就是-1的补码:11111111
3.个人理解的取反过程:
-3先转换成代码为 1…1111101 取反运算后得:0000……010存储进内存中, 识别为正数直接输出。所以输出即-2
知道 1的代码原码为:0000……0001
通过~运算按位取反得 111111……10①
将①存储进内存中,有符号位识别为负数,所以以原码打印输出。
①的原码为 100000……10所以打印结果为-2。
注意:负数原码→反码 ,符号位不变。
负数反码→补码,反码+1
4.更简单的算法:设(~i)=x 则x+i=-1