鱼C论坛

 找回密码
 立即注册
查看: 1875|回复: 6

[已解决]大哥。。。我被宏定义难住了。。。开来救救我。。。

[复制链接]
发表于 2019-9-4 11:12:30 | 显示全部楼层 |阅读模式
10鱼币
#define MOD_CONTROL_LEFT    (1<<0)
#define MOD_SHIFT_LEFT      (1<<1)                //这些括号里面的部分是什么意思,这个实在搞不懂,求大哥教教我
#define MOD_ALT_LEFT        (1<<2)
#define MOD_GUI_LEFT        (1<<3)
#define MOD_CONTROL_RIGHT   (1<<4)
#define MOD_SHIFT_RIGHT     (1<<5)
#define MOD_ALT_RIGHT       (1<<6)
#define MOD_GUI_RIGHT       (1<<7)

#define KEY_A       4
#define KEY_B       5
#define KEY_C       6
#define KEY_D       7
#define KEY_E       8
#define KEY_F       9
#define KEY_G       10
#define KEY_H       11
#define KEY_I       12
#define KEY_J       13
#define KEY_K       14
#define KEY_L       15
#define KEY_M       16
#define KEY_N       17
#define KEY_O       18
#define KEY_P       19
#define KEY_Q       20
#define KEY_R       21
#define KEY_S       22
#define KEY_T       23
#define KEY_U       24
#define KEY_V       25
#define KEY_W       26
#define KEY_X       27
#define KEY_Y       29
#define KEY_Z       28
#define KEY_1       30
#define KEY_2       31
#define KEY_3       32
#define KEY_4       33
#define KEY_5       34
#define KEY_6       35
#define KEY_7       36
#define KEY_8       37
#define KEY_9       38
#define KEY_0       39

#define KEY_ENTER   40
#define KEY_TAB            43
#define KEY_SPACE   44

#define KEY_F1      58
#define KEY_F2      59
#define KEY_F3      60
#define KEY_F4      61
#define KEY_F5      62
#define KEY_F6      63
#define KEY_F7      64
#define KEY_F8      65
#define KEY_F9      66
#define KEY_F10     67
#define KEY_F11     68
#define KEY_F12     69

#define KEY_ARROW_LEFT 0x50
最佳答案
2019-9-4 11:12:31
都不是,它表示源代码中的MOD_SHIFT_LEFT要用(1<<1)这个文本替换,就像你在Word里打一个文件,用查找替换功能一样。
至于移位操作,那要在程序运行时才会进行的。

最佳答案

查看完整内容

都不是,它表示源代码中的MOD_SHIFT_LEFT要用(1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-4 11:12:31 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
都不是,它表示源代码中的MOD_SHIFT_LEFT要用(1<<1)这个文本替换,就像你在Word里打一个文件,用查找替换功能一样。
至于移位操作,那要在程序运行时才会进行的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-4 11:40:47 | 显示全部楼层
本帖最后由 jackz007 于 2019-9-4 12:38 编辑

(1 << n)的意思是把 1 向左移动 n 个二进制位,其实就是 2 ^ n,比如,(1 << 0)= 1,(1 << 3) = 8 ,. . .(1 << 7) = 128

只要运行一下下面的代码就明白了
#include <stdio.h>

#define MOD_CONTROL_LEFT    (1<<0)
#define MOD_SHIFT_LEFT      (1<<1)
#define MOD_ALT_LEFT        (1<<2)
#define MOD_GUI_LEFT        (1<<3)
#define MOD_CONTROL_RIGHT   (1<<4)
#define MOD_SHIFT_RIGHT     (1<<5)
#define MOD_ALT_RIGHT       (1<<6)
#define MOD_GUI_RIGHT       (1<<7)

main(void)
{
        printf(" mod_control_left : %d\n" , MOD_CONTROL_LEFT)  ;
        printf("   mod_shift_left : %d\n" , MOD_SHIFT_LEFT)    ;
        printf("     mod_alt_left : %d\n" , MOD_ALT_LEFT)      ;
        printf("     mod_gui_left : %d\n" , MOD_GUI_LEFT)      ;
        printf("mod_control_right : %d\n" , MOD_CONTROL_RIGHT) ;
        printf("  mod_shift_right : %d\n" , MOD_SHIFT_RIGHT)   ;
        printf("    mod_alt_right : %d\n" , MOD_ALT_RIGHT)     ;
        printf("    mod_gui_right : %d\n" , MOD_GUI_RIGHT)     ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-4 11:43:10 | 显示全部楼层
本帖最后由 superbe 于 2019-9-4 11:50 编辑

这里的<<是左移位操作符号,<<1后面的1表示移动1位,移出的最高位丢弃。
拿一个字节来说吧,1的二进制是00000001,1<<1就是将1左移1位就变成了00000010(=2),1<<2就是将1左移2位就变成了00000100(=4),依次类推。
比如这行#define MOD_SHIFT_LEFT      (1<<1),预编译时代码中出现的MOD_SHIFT_LEFT都被(1<<1)代替,(1<<1)是当作字符串原封不动替换的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-9-4 14:05:04 | 显示全部楼层

那这个宏定义表示的是移位这个操作呢还是移位后的这个值啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-9-4 14:06:48 | 显示全部楼层

那这个宏定义表示的是移位这个操作呢还是移位后的这个值啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-5 09:50:55 | 显示全部楼层
老坚果 发表于 2019-9-4 14:05
那这个宏定义表示的是移位这个操作呢还是移位后的这个值啊?

        所谓的宏,就是文本替换,一个宏名代表一段文本,只要在源码中出现预定义的宏名,就在这个位置用它所代表的文本进行替换。

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
老坚果 + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 01:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表