1、变量在内存中存储的细节 给变量分配内存时,内存寻址由大到小,从大得地址开始分配。 例如: int number1; int number2; 内存首先分配4个字节的地址给number1,然后在分配4个字节的地址给number2。 number2的地址比number1得地址小4。 每个变量都有4个字节的空间,地址值最低的那个就是这个变量的地址。数值存储也是从分配空间的低地址开始储存。
2、二进制内存表示如下 例如 int i = 2; 在内存中 0000 0000 0000 0000 0000 0000 0000 0000 0010 最高位为1时是负数,最高位为0时是整数。
3、位运算 1、按位与& 只有对应的两个二进位均为1时,结果才为1,否则为0 9 & 5 的结果是1 计算原理 9 1001 5 0101 & --------- 结果为 0001 按位与的作用,可以快速精确的获得某位上得数,直接用1去&它,其他为都用0去&,最后结果很容易就能看到它的值。 2、按位或| 只要有一个是1,结果就是1,否则为0 计算原理 9 1001 5 0101 | --------- 结果为 1101 3、按位异或^(在C语言中是按位异或,在OC中是其他含义。) 当对应的二进位相异(不相同)时,结果为1,否则为0 计算原理 9 1001 5 0101 ^ --------- 结果为 1100 一般的使用场合: 规律1、自己异或自己,结果为0。 规律2、9^5^6==5^6^9一样 规律3、任何数值跟0进行异或,结果还是原来的数值。 从上得到 规律4、a^b^a == b 第三种交换变量a和b的方法 a = a ^ b; b = a^ b; a = a^ b; 4、按位取反~ 把每一位都取反,0变1,1变0 5、左移<< a<<n 相当于把a的每一个二进位往左移n位,每移一次,最高位消失,最低位用0来补充 例如 0000 0000 0000 1111 进行左移2次 结果 0000 0000 0011 1100 规律:5<<1 结果是10 5<<2 结果是是20 得出 5<<n 结果为5*2的n次方 使用场景:快速计算n*2的j次方 n<<j 6、右移>> 把每一个二进位向右移,最高位(符号位)不变,空出的部位用最高位(符号位)来补全。 例如 8>>2 0000 1000 右移两次之后 结果0000 0010 规律:8>>1 结果是8除以2的1次方 8>>2结果是8除以2的2次方 8>>n结果是8除以2的n次方
|