1、>>和<<
符号>>可以理解为除以2的几次方,例如a>>b相当于a除以2^b。相反,符号<<可以理解为乘2的几次方。
上面描述的只是它们的数字意义。
实际上>>为右移运算符,其运算规则为“符号位不变,左边补上符号位”,具体来说就是按照二进制的形式把所有数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,正数补0,负数补1。
<<为左移运算符,其运算规则为按照二进制的形式把所有数字向左移动对应的位数,低位补0。
2、&和&&
&:按位与,都为1时结果为1,否则结果为0。例如1011 & 1010 = 1110。
&&:逻辑与,a&&b,只有当a和b均为true时结果为true,否则结果为false。
3、指针赋值
指针是一种指向变量地址的变量,既可以指向一个普通变量,也可以指向结构体变量。
对指针进行赋值时,等号右边既可以是a,也可以是a。当等号右边是a时,则指向的是该地址所存放的数据。当等号右边是a时,则指向的是该地址。
#include<stdio.h>
int main()
{
int i = 8;
int* j = &i; // j指向i的地址
int* k = (int*)i; // k等于变量i的值
// 也可以写成如下形式
// int* j;
// int* k;
// j = &i;
// k = (int*)i;
printf("j=%d\n",j);
printf("\n");
printf("k=%d\n",k);
printf("\n");
printf("&i=%d\n",&i);
return 0;
}
运行结果如下:
指针的类型决定了指针±整数时的步长
int* i = 0; // 定义一个空指针i
上面定义了一个指针变量i,*(i + 1)实际上并非加1,因为i为int类型,所以加1实际上为加32。