黑马程序员——C语言——位运算符和变量存储原理

来源:互联网 发布:电信网络玩网通区 编辑:程序博客网 时间:2024/06/02 03:30

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


1. 位运算符介绍

&:按位与

|:按位或

~:按位取反

>>:右移位

<<:左移位

^:按位异或(相同为0,不同为1)

位运算:按二进制位进行的运算,只能用于整型数据


<<左移,左移n位,高位丢弃,低位补0,新值=原值*2的n次方

>>右移n位,移出部分丢弃,高位补符号位,新值=原值/2的n次方,结果是整数部分

注意:左移位可能改变一个数的正负性,而右移位不会。


位运算技巧:

a. 任何数和1按位与,都会得到这个数的最低位(通过最低位可以判断一个数的奇偶性)

b. 把某一位置0,则和一个该位置为0,其他位置都是1的二进制数按位与


位运算代码示例:

/** *编程实现,把10进制转换成2进制 方法:和1按位与,循环右移求出最低位 */#include <stdio.h>//定义一个方法,实现10进制数转换成2进制void changeToBinary(int n){    //定义一个变量保存2进制数的位数    int length=sizeof(n)*8;    //定义一个临时变量    int temp;    for (int i=0; i<length; i++) {                temp=n;        //顺序打印,如果temp=temp>>i,是逆序打印        temp=temp>>(31-i);        //和1按位与,求出每一位的二进制位的数码        temp=temp&1;        printf("%d",temp);    }    }int main(int argc, const char * argv[]) {    //声明方法    void changeToBinary(int n);    //定义一个变量存放十进制整型数    int n=0;    printf("Please enter a number:\n");    //把从键盘输入的十进制数保存到变量中    scanf("%d",&n);    changeToBinary(n);        return 0;}

2. 变量存储原理

%p:打印变量地址

&:获取变量地址

计算机分配内存的时候,从高地址向低地址分配,先定义的变量,分配的是高地址,后定义的变量,分配的是低地址,

顺序定义的两个变量,其在内存中的地址不一定连续。

示例代码如下:

    int a=3;    int b=4;    printf("adress a=%p\n",&a);    printf("adress b=%p\n",&b); //打印结果是a的地址高于b的地址


一个变量在内存中存储的时候,低地址存放的是低字节,高地址存放的时高地址,获取变量的地址,获取的是变量的首地址。

示例代码如下:

//    获取变量中每个字节的内容    int c=258;    printf("%p\n",&c);//    int *p=&c; //p+1偏移4个内存单元    char *p=&c;  //p+1偏移1个内存单元    printf("第1个字节的地址是:%p,存放的内容是:%d\n",p,*p); //打印出第1个字节的信息 *p=2    printf("第2个字节的地址是:%p,存放的内容是:%d\n",p+1,*(p+1)); //打印出第2个字节的信息   *(p+1)=1    printf("第3个字节的地址是:%p,存放的内容是:%d\n",p+2,*(p+2)); //打印出第3个字节的信息   <span style="font-family: Arial, Helvetica, sans-serif;">*(p+2)=0</span>    printf("第4个字节的地址是:%p,存放的内容是:%d\n",p+3,*(p+3)); //打印出第4个字节的信息   <span style="font-family: Arial, Helvetica, sans-serif;">*(p+3)=0</span>


1 0
原创粉丝点击