C语言 1 << 0 是什么意思

是在GTK+2.0的Standard Enumerations中,有enum GtkAccelFlags。

具体如下:

typedef enum
{
GTK_ACCEL_VISIBLE = 1 << 0, /* display in GtkAccelLabel? */
GTK_ACCEL_LOCKED = 1 << 1, /* is it removable? */
GTK_ACCEL_MASK = 0x07
} GtkAccelFlags;

想知道具体是什么意思。
--------------------------
我刚才在程序中试了试,使用GTK_ACCEL_VISIBLE做参数和使用GTK_ACCEL_MASK做参数,程序表现的行为是一样的。
如果使用GTK_ACCEL_LOCKED做参数,则菜单上的快捷键不显示。

相关的程序代码如下:
accel_group = gtk_accel_group_new();
gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
quit = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, accel_group);
gtk_widget_add_accelerator(quit, "activate", accel_group, GDK_q, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
--------------------------
有大侠指点下,高分酬谢~

1 << 0 是把1按2进制左移0位,结果还是 1 。

<< 是左移运算符,>> 右移运算符。C语言中的符号分为10类:算术运算符、关系运算符、逻辑运算符、位操作运算符、赋值运算符、条件运算符、逗号运算符、指针运算符、求字节数运算符和特殊运算符。

关系运算符:用于比较运算。包括大于(>)、小于(<)、等于(==)、 大于等于(>=)、小于等于(<=)和不等于(!=)六种。

逻辑运算符:用于逻辑运算。包括与(&&)、或(||)、非(!)三种。

位操作运算符:参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。

扩展资料:

C语言中,运算符的运算优先级共分为15 级。1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。

C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。这种自左至右的结合 方向就称为“左结合性”。

而自右至左的结合方向称为“右结合性”。最典型的右结合 性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。

参考资料来源:百度百科——c语言运算符号 

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-23
1 << 0 是把1 按2进制 左移0位,结果还是 1 ,2进制 0000 0001
1 << 1, 是把1 按2进制 左移1位,结果是2,2进制 0000 0010
-------------------------------------------
enum
{
GTK_ACCEL_VISIBLE = 1 << 0,
GTK_ACCEL_LOCKED = 1 << 1,
GTK_ACCEL_MASK = 0x07
}
等价于:
#define GTK_ACCEL_VISIBLE (1 << 0)
#define GTK_ACCEL_LOCKED (1 << 1)
#define GTK_ACCEL_MASK 0x07
--------------------------------------
typedef enum
{
GTK_ACCEL_VISIBLE ...
GTK_ACCEL_LOCKED ...
GTK_ACCEL_MASK ...
} GtkAccelFlags;
定义变量类型: GtkAccelFlags
该类型变量正确的取值 只有 GTK_ACCEL_VISIBLE,GTK_ACCEL_LOCKED,GTK_ACCEL_MASK。
其它值是错误的。
--------
顾名思义:
GtkAccelFlags GTK 进入标志
GTK_ACCEL_VISIBLE 可见 0000 0001
GTK_ACCEL_LOCKED 锁定 0000 0010
GTK_ACCEL_MASK 屏蔽值 0000 0111
----
应用例子:
GtkAccelFlags flag1;
flag1 = 。。。;
if (flag1 == GTK_ACCEL_VISIBLE){
....
} else {
.....
}本回答被提问者采纳
第2个回答  2010-09-02
这是定义个枚举类型变量GtkAccelFlags ,其中1<<0是位运算,就是左移

左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。

例如:
a<<4

指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。
第3个回答  2010-09-01
<<左移运算符;>>右移运算符
判断你选的是Y还是N,Y就左移,即把1赋值,相反赋0
第4个回答  2010-09-01
应该就是普通的移位运算咯?
<<左移位
>>右移位
相似回答