此篇操作符只涉及一些容易犯错的问题
1./(除)
想将除数结果为浮点数。
①可将被除数或者除数变成浮点数,也可以两者都加
②如果想在后面加f,那么前面一定是个浮点数,否则编译时会出现问题
int main() {
float a = 6 / 5;//本质还是整数相除得整数
printf("%f\n",a);// 1
float b = 6.0 / 5.0;
printf("%f", b);// 1.2
return 0;
}
2.移位运算符
以负数为例,其实只要知道怎么移,负数的补码如何转化为原码,问题就不大了
1)左移运算符<<(注意开口方向)
int main() {
int a = -7;
//左移
int b = a << 1;
printf("%d",b); // -14
return 0;
}
2)右移运算符>>
①算术右移:右边丢弃,左边补符号位(编译器一般来说,运算的是这种)
②逻辑右移:右边丢弃,左边补0
int main() {
int a = -9;
//右移
int b = a >> 1;
printf("%d",b); //-5
return 0;
}
注意: a的值是没有变的!
计算n二进制的补码有多少个1
判断n是否为2次方的数字
//计算n二进制的补码有多少个1
int countnum1(int n ) {
int i = 0;
int count = 0;
for ( i = 0; i < 32; i++)
{
if (((n >> i) & 1) == 1) {
count++;
}
}
return count;
}
//另解
int countnum1(int n ) {
int count = 0;
while(n){
if(n % == 1){
count++;
}
n /= 2;
}
return co