(24)位运算符、sizeof运算符

位运算符

位运算符作用于整数类型,并把运算对象看成是二进制的集合。位运算符提供检查和设置二进制位的功能,满足左结合律。


但是位运算关于符号位如何处理没有明确的规定,改变符号位的值是一种未定义的行为,所以建议仅将位运算符作用于无符号 型。


左移运算符(<<)在右侧插入值为0的二进制位。
右移运算符(>>)的行为则依赖于其左侧运算对象对象的类型:如果该运算对象是无符号类型,在左侧插入值为0的二进制位,如果

该运算对象是带符号类型,在左侧插入符号位的副本或值为0的二进制位,如何选择要视具体环境而定。

int b,a = 2;
b = a;
a =a << 3;
b = b >> 2;
cout << a << endl;	//输出16
cout << b << endl;	//输出0
位求反运算符(~)将运算对象逐位求反后生成一个新值,将1置为0,、将0置为1:

unsigned int a = 4;
a = ~a;
cout << a << endl;	 //输出4294967291


位与运算符(&):如果两个运算对象的对应位置都是1则运算结果中该位为1,否则为0.
位或运算符(|):如果两个运算对象的对应位置至少有一个为1则运算结果中该位为1,否则为0.
位异或运算符(^):如果两个运算对象的对应位置有且只有一个1则运算结果中该位为1,否则为0.


sizeof运算符

sizeof运算符返回一条表达式或一个类型名字所占的字节数。sizeof运算符满足右结合律,其所得的结果是一个size_t类型。
形式:
sizeof(type)
sizeof expr
第二种sizeof返回的是表达式结果类型的大小。
我们可以使用作用域运算符来获取类成员的大小。通常情况下只有通过类的对象才能访问到类的成员,但是sizeof运算符无须我们提
供一个具体的对象,因为想知道类成员的大小无须真的获取该成员。


sizeof运算符的结果部分的依赖于其作用的类型:
一.对char或者类型为char的表达式执行sizeof运算,结果得1
二.对引用类型执行sizeof运算得到被引用对象所占空间的大小
三.对指针执行sizeof运算得到指针本身所占空间的大小
四.对解引用指针执行sizeof运算得到指针指向的对象所占空间的大小,指针不需有效。
五.对数组执行sizeof运算得到整个数组所占空间的大小,等价于对数组中所有的元素各执行一次sizeof运算并将所得结果求和。注
  意,sizeof运算不会吧数组转换成指针来处理。
六.对string对象或vector对象执行sizeof运算只返回该类型固定部分的大小,不会计算对象中的元素所占用了多少空间。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值