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.这是规定的。
- sizeof()的返回值为常量表达式
练习
4.28
略
4.29
一样= =。。sizeof并不会把指向数组的指针当做数组来对待
4.30
在后面加括号就行,
d不需要加
逗号运算符
1.逗号运算符需要两个