- **
C中难记的小知识
我初学C,C++所遇到的一些知识。
**
*
逆波兰式*
:
a+b 称为中缀式表达式
ab+ 称为后缀式表达式即逆波兰式
例: ab+cd---------->(ab)(cd)±---------->abcd+
**
关于小数如何转化为二进制
**
例 12``.25
整数部分12 除2取余化二进制 小数部分0.25乘2取整化为二进制,最终结果为
1100.01
数据类型转换
:
不同类型数据间不能混合运算,要运算必须将类型转换,有低精度,低取值范围转换成高精度,高取值范围。
double<---------------flaot
^
|
|
|
long
^
|
|
|
unsigned
^
|
|
|
int <----------char,short
*
运算符的三属性*
:
(1)优先级:一个表达式中出现多个运算符,由优先级决定运算顺序。
(2)结合方向:一个表达式中出现多个不同级运算符时,按优先级顺序来决定结合方向。
(3)操作数个数(目数):目数决定运算符需要几个数才能完成运算。
不同类型数据间的赋值
:
整型=实型 小数点后截断,保留整数。
实型=整型 整型后面+.0。
整型=整型 (1)短=长 (低位对齐,高位溢出)
(2)长=无符号短 (低位对齐,高位补0)
(3)长=有符号短 (低位复制,高位符号位扩展,即正数补0,负数补1)
位运算
:
& 按位与(有0则0 1&X=X 0&X=0)
|按位或 (有1则1 1|X=1 0&X=X )
^按位异或 (相同为0 不同为1 a异或b b转换为二进制 b中为1的部分 a与b相同位取反 b中为0的部分 a与b相同位不变 )
~取反 (0变为1 1变为0)
<<左移 (左移几位就是给数乘2的几次方)
右移 ( (1)对于无符号数,右移时左边高位移入0;
(2)对于有符号数,如果原来符号位为0(该数为正),则左边也是移入0,如果原来符号位为1(该数为负),则左边移入0还是1,要取决于算用的计算机系统。 移入0的称为“逻辑右移”,移入1的称为“算数右移”。
)
例题:找出a数组中只出现了一次的数
#include<stdio.h>
> int main()
> {
> int a[]={1,3,2,5,4,6,7,8,9,6,7,9,8,5,3,2,1};
> int num=0;
> for(int i=0;i<sizeof(a)/sizeof(a[0]);i++)
> {
> num=num^a[i];
> }
> printf("%d\n",num);
> }
2.## C与C++的一些不同处
**
定义常数
**
C中可以使用预处理命令来定义常数,但C++中一般不建议使用,C++中使用const来定义常数,如const int i=10;
**
左值与右值
**
表达式或者变量要有左值即为该表达式或者变量要有存储空间。
表达式或者变量要有右值即为该表达式或者变量要有值。
C中:++i,i++这些只有右值而没有左值。
C++中:++i既有左值也有右值;而i++只有右值。
并且C中的赋值表达式没有左值而C++中有 如(a+b)在C中不能写为(a+b)=c,而C++中可以。