黑马程序员——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
- 黑马程序员——C语言——位运算符和变量存储原理
- 黑马程序员——C语言学习笔记03 变量在内存中存储的细节、位运算
- 黑马程序员——C语言基础篇---基本运算和位运算
- 黑马程序员——C语言—结构体变量存储原理
- 黑马程序员——c语言学习---变量与存储
- 黑马程序员——IOS学习笔记(C语言存储方式和变量作用域)
- 黑马程序员——C基础之位运算符
- 黑马程序员——C语言------指针和指针变量
- 黑马程序员——位运算符
- 黑马程序员——C基础——进制、输出控制符和位运算
- 黑马程序员———C语言———【按位运算】
- 黑马程序员07——C语言之进制使用与位运算
- 黑马程序员——c语言的进制表达方式,位运算,数组,字符串数组
- 黑马程序员——IOS基础---C语言学习之内存分析与位运算
- 黑马程序员——C语言——运算符
- 黑马程序员——C语言——运算符
- 黑马程序员———C语言的运算符
- 黑马程序员———C语言 运算符
- Android View的基本信息
- python对文件进行逆序重命名
- SQL Server 2008 在Windows Server 2008上的访问配置 Windows 防火墙
- ucontext实现协程
- js获取图片宽高
- 黑马程序员——C语言——位运算符和变量存储原理
- Android Studio导入第三方jar包或依赖工程的方法
- css 边框箭头和三角形写法
- 复制datatable的行到另一个DT
- 第4周项目3单链表的应用3
- ARRAYUTILS学习笔记
- 高大上的下拉刷新动画
- 第十五周--知原理
- 第十一周项目1-(1)二叉树的层次遍历算法