1、关于按位取反操作符“~”的说明:
//由于计算机在存储负数的时候内存中是以补码的形式存储的,所以
//以下例子与常识不一样
int main()
{
int a = 0;
int b = ~a;
printf("%d\n", b); //在打印按位取反的a即b时,并不是常识中
//00000000000000000000000000000000变为
//11111111111111111111111111111111即2^32
//而是-1
//因为此时计算机内存中存储的32位“1”是以补码的形式存储的
//而打印的是原码,要求出原码需经过“补码-1再除了最高位符号位不变取反”
//即补码11111111111111111111111111111111
//反码11111111111111111111111111111110
//原码10000000000000000000000000000001
//原码转为十进制就是-1
return 0;
}
2、关于强制类型转换:
int main()
{
int a = 3.14;
return 0; //此时编译器会出现一个警告,因为3.14是double类型的,int为整型
//如果想消除这个警告则要进行强制类型转换,即int a = (int)3.14;
}
3、逻辑与“&&”和按位与“&”要分清,逻辑或“||”和按位或“|”也要分清。
4、“a? b : c”称为三目操作符或条件操作符,此操作符的运行规则是,如果a为真那么表达式的值为b;如果a为假,那么表达式的值为c。