[c语言基础回顾]操作符和表达式中一些极其容易混淆的知识点
2017-11-23 20:36
441 查看
易错知识回顾
&&是逻辑上的”与”操作
12的二进制数是1100 2 的二进制是0010
12&2结果为0;
12&&2结果为1;
二进制左移N位=*(2^n);
逻辑左移=算数左移,右边统一添0
右移
二进制右移N位=/(2^n);
逻辑右移,左边统一添0
算数右移,左边添加的数和符号有关
编程默认采用算术右移
掌握一种 总位数减去另外一中即可.
数组中sizeof(array)和sizeof(&arry)区别
当在函数中 初始化之后计算长度的时候
sizeof(array)是指整个数组的字长
sizeof(&arry)是取一个指针的字长
当作为参数传参的时候
sizeof(array)和sizeof(&arry)都作为指针
sizeof(表达式) 表达式中的值并不进行计算,(size of 在编译时候执行,此时表达式的值未确定但是类型已经确定)
这里是因为数组是不能直接赋值的,数组的名字就是个常量指针
这里相当于
解决方法很简单了
其实一般的解决方式是利用strcpy函数
这两个结果是一样的,但是在加一操作后就不一样了
可以看到arr+1是下一个元素.&arr+1就直接跳过整个数组了(数组长度是12)
一.区分按位操作和逻辑操作
&是将数在内存中以二进制补码形式按位进行”与”操作&&是逻辑上的”与”操作
12的二进制数是1100 2 的二进制是0010
12&2结果为0;
12&&2结果为1;
二. 位移操作
1. 基本知识
左移二进制左移N位=*(2^n);
逻辑左移=算数左移,右边统一添0
右移
二进制右移N位=/(2^n);
逻辑右移,左边统一添0
算数右移,左边添加的数和符号有关
编程默认采用算术右移
2. 一个经典的算法
求一个数二进制补码中1和0的个数int binaryCount(int Num) { int count = 0; while (Num) { Num = Num&(Num - 1);//减一操作是把最右边第一个1还有之后的0(如果有)取反,之后用与操作置零 count1++; } return count; }
//求二进制 中0 的个数 while (num + 1) { num |= (num + 1); // 将最右边的0和之后的1(如果有)取反,用或操作置1,直到溢出变为全零 count++; } return count; }
掌握一种 总位数减去另外一中即可.
三.szie of重要知识点
size of是一个单操作符,并不是一个函数;数组中sizeof(array)和sizeof(&arry)区别
当在函数中 初始化之后计算长度的时候
sizeof(array)是指整个数组的字长
sizeof(&arry)是取一个指针的字长
当作为参数传参的时候
sizeof(array)和sizeof(&arry)都作为指针
sizeof(表达式) 表达式中的值并不进行计算,(size of 在编译时候执行,此时表达式的值未确定但是类型已经确定)
四.结构体中一个常犯的错误
这里是因为数组是不能直接赋值的,数组的名字就是个常量指针
这里相当于
int arr[3]={1,2,3,4}; arr=3; 0x002233=123; 5=3;
解决方法很简单了
其实一般的解决方式是利用strcpy函数
五. &(取地址符)对于数组的不同之处
我们知道一个数组初始化的时候数组名就是一个指向第一个元素的指针常量int arr[3]; printf("%p",arr);//打印的是数组第一个元素的地址 printf(("%p",&arr);//打印的是整个数组的首地址
这两个结果是一样的,但是在加一操作后就不一样了
int arr[3] = {1,3,2}; printf("%p\n", arr); printf("arr加一的结果是%p\n", arr+1); printf("%p\n", &arr); printf("&arr加一的结果是%p\n", &arr+1);
可以看到arr+1是下一个元素.&arr+1就直接跳过整个数组了(数组长度是12)
相关文章推荐
- C语言中的一些容易出现错误的知识点
- C语言一些知识点回顾
- 关于IO流操作中的一些容易混淆的知识点
- C语言一些容易忘得知识点汇总
- 一些非常容易混淆的零碎知识点积累
- c++的一些容易混淆基础知识点
- java基础知识回顾之---java String final类 容易混淆的java String常量池内存分析
- C语言一些基础:数据类型,运算类型及表达式
- 一组JavaScript试题(包含一些容易混淆的知识点)
- C语言中的几个容易混淆的知识点总结
- Java基础知识点记录(主要记录一些不常见或者容易忘记的知识点,时刻更新)
- JavaScript一些容易混淆的知识点(2014-12-23更新)
- C语言中的几个容易混淆的知识点总结
- java基础中容易混淆的知识点
- 关于IO流操作中的一些容易混淆的知识点
- OC中一些容易混淆和忘记的知识点总结
- c语言容易混淆的题目
- 给Java新手的一些建议----Java知识点归纳(Java基础部分)
- DataTable,DataView和DataGrid中一些容易混淆的概念
- C# 面试前的准备_基础知识点的回顾_03