返回信息流各位前辈,小弟来问一个枚举类型的赋值问题:
enum ofp_port_state {
OFPPS_LINK_DOWN = 1<<0,
OFPPS_STP_LISTEN =0<<8,
OFPPS_STP_LEARN =1<<8,
OFPPS_STP_FORWARD =2<<8,
}
其中的0<<8,1<<8代表什么样的数值呢?自己试着用printf打了几个数,1<<0为0 ,0<<1为0,1<<8为256,2<<8为512,3<<8为768,但是实在找不到规律.
这是一条镜像帖。来源:北邮人论坛 / cpp / #71966同步于 2013/6/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[问题]枚举类型的赋值问题 0<<8
sixuan
2013/6/20镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
移位操作符,安位左移
10进制 2进制
1 00000000 00000001
1<<8 00000001 00000000
移动8位应该是为了在某些机器上,低位移动高位,实现特殊的作用。
http://www.cnblogs.com/sunrack/articles/1245830.html
谢谢版主大人,解答很清楚!
【 在 chen24828393 的大作中提到: 】
: 移位操作符,安位左移
: 10进制 2进制
: 1 00000000 00000001
: ...................
1<<0这样的操作不改变值,请问有啥意义?
谢谢
【 在 LafengHu 的大作中提到: 】
: 1<<0 反正我通过gcc编译,跑出来是1。。 表示为0理解不能。。
没意义。。但是放到循环或者宏可能出现这种情况吧?
比如 for (i = 0; i < max; i++)
n[i] = n[i] + i;
你说一个数加0有什么意思。。。
这里主要是讨论下操作之后的值吧,至于意义肯定存在于实际场景中
比如:
do{
n++;
}while(0);
看起来没意义,但是在gcc里就可以防止编译器优化。
【 在 xiangyang 的大作中提到: 】
: 1<<0这样的操作不改变值,请问有啥意义?
: 谢谢
知道一些了,不过之前看公司里用这样代码,确实实际场景中也依然有点晕
【 在 LafengHu 的大作中提到: 】
: 没意义。。但是放到循环或者宏可能出现这种情况吧?
: 比如 for (i = 0; i < max; i++)
: n[i] = n[i] + i;
: ...................