C++ Primer 第4章运算符 4.8位运算~4.11 练习和总结

本文详细讲解了C++中的位运算符,包括位移运算符、位求反、位或、位与、位异或。还探讨了sizeof运算符的工作原理和应用,以及逗号运算符的使用。此外,文章介绍了类型转换的隐式和显式转换,并通过实例解析了整型提升和不同类型的转换规则。
摘要由CSDN通过智能技术生成

4.8 位运算符

位运算符
位运算符有如上几个

1.位运算符作用于整型类型的运算对象,把运算对象当做二进制的集合。

2.<<和>>是位移运算符,<<代表左移,>>代表右移,运算对象使用<<往左移动数位,后续补零,无需关注是否是有符号类型运算对象使用>>向右移动数位,如果是无符号类型其左侧补零,如果是有符号类型,则左侧补符号位还是补零,取决于编译器,在VS2017下实现结果为补符号位,剑指offer中也是补符号位。

3.注意移位运算符要求expr2必须是整数,且不能为负

4.位求反~,顾名思义,运算对象按位求反

5.位或|,位与&,位异或^,注意,位或是对应位置至少一个为1,那个位置求得的结果才为1,位与则是对应位置要都为1,那个位置求得的结果才为1,位异或则是,对应位置有且只有一个为1,那个位置才为1,其余情况都是0.和逻辑运算符不一样,不要弄混了

练习
4.25

假设求值结果还是按照8位计算。那么移动六位之后,得到的结果是这样的,超过的部分截取掉,剩下的部分则为0100 0000,转化为十进制位64,查表得对应得符号位@。

https://blog.csdn.net/tenfyguo/article/details/5918142

00000000 00000000 00011100 01000000

4.26

具体还是的看编译器对int得实现,如果编译器对int得实现,只占用16位,则quizl得到的结果一直为0

4.27
做这种题,首先把变量的二进制形式写出来,因为前面多位为0,所以忽略了,只写16位

ul1
0000 0000 0000 0011
ul2
0000 0000 0000 0111

a.0000 0000 0000 0011–>3
b.0000 0000 0000 0111 -->7
c.true
d.true

sizeof运算符

1.sizeof运算符用来返回一个类型或者一条表达式所占的字节数,其返回类型位size_t类型,值得注意的是,它并不会真的执行这个表达式,调用方式有两种:

sizeof (type)
sizeof expr

2.因为sizeof并不会真的去计算运算对象(一个类型或者表达式),所以sizeof中可以写一个类型的无效指针,或者一个类中并没有实际初始化的数据成员。

Student std,*std_p;
sizeof(*std_p);
sizeof std_p;
sizeof std.score
sizeof Student::score//C++11标准,直接使用作用域符来访问类中的数据成员

3.对于string和vecotor容器,sizeof获取到的是他们实际占用的空间的大小,而不是里面存储的元素的所占的空间

4.sizeof可以获取数组的大小,等价于将数组中的每个元素都sizeof一次,然后求和。

5.sizeof遵循右结合律

6.什么都没有的类,sizeof()得到的结果为1.这是规定的。

  1. sizeof()的返回值为常量表达式
练习
4.28

4.29

一样= =。。sizeof并不会把指向数组的指针当做数组来对待

4.30

在后面加括号就行,

d不需要加

逗号运算符

1.逗号运算符需要两个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值