面试笔记4(运算符及优先级)

1.语句和表达式的区别是:表达式具有一个值,而语句没有值。

2.赋值操作具有右结合性,当表达式含有多个赋值操作时,从右向左结合。多个赋值操作中,各变量必须具有相同的数据类型,或者具有可转换为同一类型的数据类型。

3.前缀运算时变后用,而后缀运算时先用后变。

4.自增、自减运算符只能作用于变量,而不能作用于常量或表达式。

5.前缀自增能有用作左值表达式,后缀自增只能用于右值表达式。这是因为前缀自增返回操作数本身,而后缀自增返回一个临时变量

6.负号运算符和自增运算符优先级相同,得看结合方向,结合方向是从右向左

7.关系与逻辑运算符

关系操作符具有左结合性

逻辑操作符将其操作数视为条件表达式。

8位运算符

与 &   都为1则为1

或|     有一个为1,就为1

取反~

异或^  两位不同时才为1,相当于相同的时候就会消除。

移位<<   >>


9关于异或

两个相同的数异或结果为零,满足交换律。

可以用作,快速查找不同的数字。交换两个变量的值。   异或求丢失!!!

10.不用运算符实现两个数的加法

a.先不考虑进位。   用异或实现累加。

b.考虑进位,只有同为1才会产生进位,用与& 实现,然后再左移动1位。

然后a,b相加    则是   a^b+((a&b)<<1 )  如果求两个数的平均数,就右移动1位。

11.n &(n-1)  式子是去掉最右面的1.如果去掉之后变成0,则说明是2的正整数幂。因为2的正整数幂有且仅有1位是1,其余为0.去掉右面的1之后就变成0了。

上面的式子可以计算n转换成2进制后包含1的数量。

12.对于有符号类型,右移是最高位补符号位,左移动都是补0.

13.将a转换成b需改变的二进制的位数。

求异或,再计算包含的1的个数。

14.奇偶位互换。

与一个数进行与&保留出偶数为

然后再保留出奇数位。

奇数位左移动,偶数位右移,然后求或。

15.C++的基本类型转换

赋值转换:

当一个超过其取值范围的赋值给一个指定类型的对象时,会将高位舍去。

当一个取值范围较小的值赋值给一个取值范围较大的值时,会将符号位扩展。

(记住:int,short等的最高位)short是16位,无符号数最高可以表示 65536

表达式的转换:

整型提升:c++将bool、char、unsigned char 、signed char 、short 、signed short都会自动转换成int型。

运算时的转换:较小的类型会转换成较大的类型。在32为机器上,long和int一样长都是一个字节。  当表达式包含unsigned int和long时都会提升为unsigned long型。

int型负数转换成unsigned int时,会将符号位转换成数值位。-1的补码是1111111。c++中,有符号数和无符号数转换时,内容并没有变只是解释不同了。

16.运算符的优先级及结合性

a 单目运算符的优先级高于双目运算符。

[]   ()    .       ->的优先级最高。结合方向从左向右

负号的优先级高于自增、自减类型的运算符。结合性从右向左。

然后是sizeof

然后是+- *%等

然后是移位

然后是关系运算符。

然后是位

然后是逻辑

然后是三目

然后是赋值

然后是逗号等


有三目和单目、赋值运算符是从右向左的。


17.y^((x^y)&-(x<y))   返回两个整数的最小值。

可以通过x<y表达式的结果得到全0或者全1的数。

18. float  x与零值比较的语句

if(x>-0.000001&&x<0.000001)float只能保证6位有效数字,double能保证10位有效数字。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值