不得先来了解一下C的操作符??

这一篇就是对C里的操作符进行小结一下,哈哈哈,又是一句废话,那就直接上干货

算术操作符

+ - * / %

1.除了 % 操作符以外,其他的几个操作符都可以作用于整数和浮点数

2.对于 / 操作符如果两个操作数都为整数,执行整数除法,但只要有浮点数执行的就是浮点数除法

3.% 操作符的两个操作数必须为整数,返回的是整除之后的余数

移位操作符

<<   >>

首先说一下,数字存储在内存总以补码形式存储,然后,原码除符号位取反即是反码,反码加一即是补码

1.左移:左边抛弃,右边补0

2.右移:逻辑移位: 左边补0,右边丢弃

              算术移位 :左边用原该值符号位填充,右边丢弃

3.不要移动负数位(x>>-1)

位操作符

& | ^

1. &  按位与      都为1才是1

2. |   按位或       有个1就是1

3. ^   按位异或   相同为0不同为1

4.  a 和 0 异或,是a

     a 和 a 异或,是0

    一个数字 与 1,结果是1,最低位就是1;结果是0,最低位就是0

   一个数字二进制x位改为1  或(x位是1,其他位是0)

   一个数字二进制x位改为0  与(x位是0,其他位是1)

赋值操作符

=   +=  -=  *=  /=  %=  >>=  <<=  &=  |=  ^=  

1.复合的可以写成分开的 :x = x+10;      x+=10;

单目操作符

!  -  +  &  sizeof  ~  --  ++  *

1.单目操作符 即 操作数只有一个

关系操作符

>  >=  <  <=  !=  ==

1.关系操作符,即两个操作数之间的

2.在写代码过程中会有 = 和 == 写错,小心点喽

逻辑操作符

&&   ||   

1.这个是不是和上面的按位与按位或像像的,这可不是一回事

     &&  且              ||    或

2.    1&2      是0

       1&&2    是1

       1 | 2     是3

       1 || 2     是1

条件操作符

a ? b : c

1,如果 a 成立,则执行 b,否则执行 c

2.找出两数的较大值      max = a>b?a:b;

逗号表达式

a,b,c,d,……

1.从左向右依次执行,整个表达式的结果是最后一个表达式的结果

以上就是对操作符的小结,有兴趣的可以评论补充,谢谢啦

如果有不对的地方,可以评论告诉我,望指导!

<think>我们正在处理一个关于Vim编辑器操作的问题。用户希望了解如何在Vim中实现将行尾最后一个字对齐的操作方法。我们手头有四条引用,我们将从中提取有用信息并结合Vim的常用操作来回答。 首先,理解用户需求:用户想要将多行的行尾最后一个字对齐。例如,如果有多行文本,每行的最后一个字位置不一致,用户希望调整它们使这些最后一个字在同一列上对齐。 在Vim中,实现对齐通常可以使用以下方法: 1. 使用`EasyAlign`插件(引用[1]提到该插件) 2. 使用块选择模式(引用[3]提到块选择模式) 3. 使用宏(引用[4]提到录制宏) 4. 使用替换命令结合正则表达式(引用[3]提到替换命令) 由于对齐行尾最后一个字,我们可能需要将每行的最后一个字(非空白字)对齐到同一列。这可以通过在每行末尾添加适当数量的空格来实现,使得最后一个字后面的位置相同。 然而,需要注意的是,Vim本身没有直接对齐行尾最后一个字的命令,但我们可以通过组合命令实现。 参考引用: - 引用[1]中提到了`vim-easy-align`插件,它支持对齐操作。我们可以使用该插件来对齐指定字(例如行尾的字)。 - 引用[3]提到块选择模式(Ctrl+v)可以同时编辑多行,这可以用于在行尾插入空格。 - 引用[4]提到录制宏,可以用于重复操作。 具体操作步骤(不使用插件): 1. 我们需要将光标移动到每行的最后一个非空白字使用`g_`命令,如引用[1]所述)。 2. 然后记录当前位置,计算需要添加的空格数量(这需要知道目标列位置)。 3. 在每行的最后一个非空白字后面添加一定数量的空格,以达到对齐的目标列。 但是,手动计算每行需要添加的空格数量很麻烦。我们可以使用以下技巧: 方法一:使用`EasyAlign`插件(推荐,如果已安装) 1. 安装`vim-easy-align`(如果未安装)。 2. 在可视模式下选中需要对齐的行(按`V`选择行)。 3. 输入`ga`(根据引用[1]配置的快捷键)然后输入对齐规则。由于要对齐最后一个字,我们可以指定对齐行尾。但是,该插件默认支持对齐指定字,所以我们可以尝试对齐行尾(使用`$`)?但是,该插件默认不支持按行尾对齐,我们需要调整。 实际上,`EasyAlign`可以通过指定对齐规则来实现。例如,如果我们想对齐最后一个非空白字,我们可以尝试: - 在选中行后,输入`ga`,然后输入`*`(表示空格分隔的单词)并指定方向为右对齐,但这样可能不行。 另一种思路:使用正则表达式在行尾添加空格,然后使用`EasyAlign`对齐某个字?但用户要求对齐的是最后一个字。 方法二:使用宏和命令 1. 确定目标列(比如希望最后一列是80列)。 2. 对于每一行: a. 移动到行尾最后一个非空白字(`g_`)。 b. 记录当前列号(可以用`col('.')`函数,但这需要在脚本中使用)。 c. 计算需要添加的空格数:80 - 当前列号。 d. 在当前位置后面插入相应数量的空格。 由于在普通模式下无法直接计算,我们可以写一个简单的宏: 假设我们想将最后一列对齐到第80列(可以根据需要调整): 1. 在命令模式下,录制宏到寄存器a:`qa` 2. 移动到行尾最后一个非空白字:`g_` 3. 插入模式:`i`(注意,此时是在最后一个非空白字后面插入,但我们可能需要在它后面插入空格,所以应该用`a`在后面追加,但注意如果已经到行尾,`a`会直接在后面追加;或者用`i`然后在最后一个非空白字前面插入?不对,我们需要在它后面插入空格,所以用`a`)。 - 但是,如果当前行最后一个非空白字后面有空格,我们可能要先删除这些空格?所以最好先确保行尾没有多余空格(使用`:s/\s\+$//`来删除行尾空格)。 4. 然后,我们计算当前列:这需要用表达式寄存器。但宏中不方便直接计算,所以我们可以换一种思路:先移动到行尾(`$`),然后用`80|`命令移动到第80列(如果当前列小于80),然后从当前位置插入空格直到80列?不行,因为我们要对齐的是最后一个字,所以最后一个字应该在第80列,那么我们需要在最后一个字后面添加空格直到79列(因为最后一个字占据一列,所以后面添加空格到79列?不对)。 实际上,我们可以在最后一个非空白字后面添加空格,直到总列数为80(即最后一个非空白字列号+空格数=80)。但宏中无法计算,所以我们可以: - 方法:先记录当前列号(在宏中无法直接记录,所以这种方法不太可行)。 方法三:使用外部命令`awk`或`column`,但用户可能希望在Vim中完成。 方法四:使用替换命令结合表达式 我们可以使用`:s`替换命令,结合`normal`命令和表达式寄存器来计算并添加空格。 具体步骤(不使用插件,但有点复杂): 1. 删除所有行尾空格:`:%s/\s\+$//` 2. 然后,我们找出所有行中最后一个非空白字的最大列号(设为M)。我们可以通过以下步骤获取最大列号: - 将光标移动到每一行,然后用`g_`移动到最后一个非空白字,用`col('.')`获取列号,然后取最大值。这需要写一个函数。 3. 然后,对于每一行,获取当前行最后一个非空白字的列号(设为c),然后添加(M-c)个空格。 但是,Vim脚本对于普通用户来说可能复杂。 因此,我们推荐使用插件`vim-easy-align`,并尝试以下操作(根据引用[1]): 1. 确保已经安装了`vim-easy-align`,并配置了快捷键(如引用[1]所述:vmap ga <Plug>(EasyAlign) 和 nmap ga <Plug>(EasyAlign))。 2. 选中需要对齐的行(可视模式按V选择多行)。 3. 输入`ga`,然后输入对齐规则。由于我们要对齐行尾,那么我们可以尝试指定一个在行尾出现的字?如果我们能保证每一行都有一个共同的字(比如逗号、分号等)在行尾,那么我们可以对齐那个字。但是,用户要求的是最后一个字,这些字可能不同。 所以,`EasyAlign`可能无法直接对齐最后一个不同的字。 另一种插件:tabular。我们可以使用tabular插件来对齐行尾?它支持通过正则表达式对齐。 例如,使用Tabular插件: :Tabularize /.*\zs./ 这个正则表达式的意思是:匹配最后一个字(.)前面的所有字(.*),然后对齐最后一个字(\zs表示匹配开始的位置,所以对齐的是最后一个字的位置)。但这样会将最后一个字作为分隔,然后对齐分隔的位置。 但是,用户要求的是将最后一个字对齐,而不是以某个字为分隔。所以,我们可以这样: :Tabularize /.\ze\s*$/ 这个正则表达式的解释:匹配行尾空白字前的任意一个字(即最后一个非空白字?但实际上,它匹配的是最后一个非空白字后面的一个字,如果行尾有空格的话,它匹配的是最后一个非空白字?不对,我们想匹配最后一个非空白字的位置,然后在这个位置对齐?实际上,Tabular会将匹配的表达式作为对齐的分隔,所以我们需要匹配一个位置,而不是字。 遗憾的是,Tabular不支持直接对齐位置,它需要匹配一个分隔。 因此,我们可以换一种思路:在每一行的最后一个非空白字后面添加足够数量的空格,使得所有行的最后一个非空白字都对齐到同一列。我们可以这样做: 1. 首先删除所有行尾空格:`:%s/\s\+$//` 2. 找出所有行中最后一个字所在列的最大值(比如通过遍历行,记录最大值)。 - 我们可以用以下命令获取每一行最后一个字的列号: :for line in range(1, line('$')) | let col = len(getline(line)) | ... - 然后得到最大值max_col。 3. 对于每一行,当前行长度为col,那么需要添加空格数为max_col - col。 4. 然后执行:`:%s/$/\=repeat(' ', max_col - len(getline('.')))/` 但是,这个替换命令会在每一行后面添加空格,使得每一行的总长度变为max_col。注意,每一行原来的长度就是最后一个字的列号(因为我们已经删除了行尾空格,所以长度就是最后一个字的列号)。 所以,步骤简化: 1. 删除行尾空格:`:%s/\s\+$//` 2. 获取最大长度: let max_len = 0 for i in range(1, line('$')) let line_len = len(getline(i)) if line_len > max_len let max_len = line_len endif endfor 3. 然后添加空格: :%s/$/\=repeat(' ', max_len - len(getline('.')))/ 这样,每一行后面都会添加空格,使得每一行长度都为max_len,从而最后一个字对齐。 但是,直接在命令行输入这些命令比较麻烦。我们可以写一个函数,或者分步执行。 如果用户不想写函数,我们可以分步: 1. 删除行尾空格:`: %s/\s\+$//g` 2. 然后,手动记录最大长度(比如用`g Ctrl+g`显示当前行信息,其中包含字节数(也就是字数))。然后选择所有行,用`g Ctrl+g`显示总行数和最大行长度?不行,因为`g Ctrl+g`显示的是当前文件的统计信息,不会给出最大行的长度。 所以,我们需要一个更好的方法。 考虑到用户可能没有安装插件,我们提供一个使用宏的方法: 假设我们想对齐到80列(固定列): 1. 删除行尾空格:`:%s/\s\+$//g` 2. 然后,对于每一行,在行尾添加空格直到80列(如果当前行长度小于80)。 - 我们可以用宏:`qa`开始录制宏 - `$` 到行尾 - 然后输入`80\|`(注意:`|`是移动到指定列,但这是绝对列号,如果当前列小于80,则移动到80列;如果大于,则停在行尾) - 然后,从行尾到80列,我们需要插入空格:`i`(进入插入模式)然后输入空格直到80列?不行,因为宏无法知道要插入多少个空格。 所以,我们可以: - 在行尾,然后输入`80g|`(这将移动光标到第80列,如果当前行长度小于80,则会在行尾和80列之间插入空格?不会,移动命令不会自动插入空格)。 - 实际上,我们需要在行尾插入空格直到80列:`80g|`命令后,光标在第80列(如果当前行长度小于80,那么光标在行尾之后的位置,即第80列上,但此时行尾到80列之间是空格吗?不是,是空位置)。然后,如果我们此时进入插入模式,输入空格,就会在行尾和80列之间插入空格。 所以,宏可以这样: - `qa` 开始录制 - `$` 到行尾 - `80g|` 移动到第80列(如果行长度大于80,则停在行尾) - `i` 进入插入模式 - 按空格键,直到达到80列(但宏录制时,我们不知道当前列,所以无法知道按多少次空格) - 所以,我们可以按`Esc`退出插入模式,然后发现自己添加了多个空格,但宏无法动态判断空格数量。 因此,这个方法也不可行。 综上所述,最可靠的方法是使用Vim脚本: 我们可以创建一个函数,并将其添加到vimrc中,但用户可能只是临时需要。 临时在Vim中执行: ``` :function! AlignLineEnds() : let max_len = 0 : let lines = range(1, line('$')) : for l in lines : let line_len = len(getline(l)) : if line_len > max_len : let max_len = line_len : endif : endfor : for l in lines : let line = getline(l) : let new_line = line . repeat(' ', max_len - len(line)) : call setline(l, new_line) : endfor :endfunction ``` 然后执行`:call AlignLineEnds()` 这样,所有行的最后一个字都会对齐到max_len列。 但是,这个方法会改变文件的空格,添加了行尾空格,可能用户不希望这样(因为通常我们不提倡行尾空格)。不过,对齐操作有时为了格式需要。 另外,注意:这个方法不会改变行中的内容,只会在行尾添加空格。 如果用户希望避免永久添加行尾空格,可以在对齐操作后,再删除行尾空格(使用`:%s/\s\+$//g`),但这会破坏对齐。所以,对齐操作和行尾空格是矛盾的。 因此,用户可能需要在特定场景下使用(比如生成表格或特定格式),然后保存。 最后,如果用户没有特殊要求,我们推荐使用插件`tabular`或者`vim-easy-align`,并指定对齐行尾的某个字(如果存在)来实现部分对齐。 根据引用[4],用户提到了用宏的方法,我们可以尝试: 1. 先删除所有行尾空格。 2. 然后,找到所有行中长度最长的行,记下其长度L(通过肉眼观察,比如用`g Ctrl+g`查看整个文件的最大行宽)。 3. 然后录制宏:从第一行开始 - `qa` 开始录制 - `$` 到行尾 - `a` 进入插入模式,然后按空格键,直到该行长度等于L(可以通过状态栏的列号观察,但手动按空格键不可靠) - 按`Esc`,然后`j`到下一行 - 录制结束:`q` 4. 然后执行`n`次宏(n是剩余行数) 这个方法需要手动按空格,所以不推荐。 综上所述,我们给出以下建议: ### 推荐方法(使用脚本): 1. 删除行尾多余空格(可选,如果本来没有空格可以跳过): ``` :%s/\s\+$// ``` 2. 执行以下命令创建一个临时函数并调用: ``` :function! AlignLineEnds() : let max_len = 0 : for l in range(1, line('$')) : let line_len = len(getline(l)) : if line_len > max_len : let max_len = line_len : endif : endfor : for l in range(1, line('$')) : let line = getline(l) : let new_line = line . repeat(' ', max_len - len(line)) : call setline(l, new_line) : endfor :endfunction :call AlignLineEnds() ``` ### 插件方法(如果已安装或愿意安装插件): - 安装`tabular`插件,然后尝试使用正则表达式对齐最后一个字(但可能需要调整正则表达式): ``` :Tabularize /.\ze\s*$/ ``` (注意:由于字不同,可能效果不理想) 由于用户问题中提到“对齐行尾最后一个字”,我们理解的是对齐最后一个非空白字所在的位置,因此上述脚本方法会在行尾添加空格,使得所有行的最后一个非空白字处于同一列。 最后,注意:以上操作在可视模式下选中部分行也可以进行,但需要调整函数中遍历的行范围。 回答结构: 1. 解释问题:对齐行尾最后一个字的含义。 2. 给出解决方案:脚本方法(详细)、插件方法(简要)、宏方法(不推荐,但提一下)。 3. 注意事项:行尾空格可能会被某些编辑器视为多余,但为了对齐不得不添加。 根据引用[1],用户提到了一些移动命令(如`g_`)和插件配置,我们可以结合使用。 最终回答: </think>在Vim中实现行尾最后一个字对齐(即对齐所有行尾最后一个非空白字),可以通过以下方法操作。以下步骤基于Vim内置功能及常用插件,结合引用内容整理: --- ### 方法1:使用`EasyAlign`插件(推荐) 若已安装`vim-easy-align`插件(引用[1]): 1. **选中目标行**(可视模式按`V`选择多行) 2. 执行对齐命令: ```vim :'<,'>EasyAlign *\zs.\ze\s*$/ ``` - **原理**:正则表达式`*\zs.\ze\s*$/`匹配行尾最后一个非空白字(`.`),`\zs`和`\ze`标记对齐位置 - **操作示例**: ``` apple -> 对齐后: apple banana -> banana cherry -> cherry ``` --- ### 方法2:手动添加空格(无需插件) 1. **删除行尾多余空格**(引用[3]): ```vim :%s/\s\+$//g " 删除所有行尾空白字 ``` 2. **计算最大列宽**: ```vim :let max_len = 0 :g/^/let len = len(getline('.') | if len > max_len | let max_len = len | endif ``` 3. **添加空格对齐**: ```vim :%s/$/\=repeat(' ', max_len - len(getline('.')))/ ``` - **原理**:每行末尾添加空格,使所有行长度一致,最后一个字自然对齐。 --- ### 方法3:录制宏(引用[4]) 1. 删除行尾空格(同上) 2. 录制宏: ```vim qa " 开始录制宏(寄存器a) g_ " 移动到行尾最后一个非空白字(引用[1]) i<Space><Esc> " 插入空格(按需多次插入) j " 移动到下一行 q " 停止录制 ``` 3. 执行宏(如对齐10行): ```vim 10@a ``` --- ### 关键操作说明 1. **移动到行尾字**: - `g_`:跳转到行尾最后一个非空白字(引用[1]) - `$`:跳转到行尾(可能包含空白) 2. **正则对齐原理**: - `\s*$`:匹配行尾空白 - `.\ze\s*$`:匹配空白前的最后一个字(需对齐的位置) 3. **批量操作**: - 可视模式选中多行后执行命令,避免全文件影响(引用[3]) - 块选择模式(`Ctrl+V`)可配合`I`或`A`命令插入字(引用[3]) > **注意**:对齐操作可能导致行尾添加空格,若需严格避免行尾空格,建议使用方法1插件或操作后执行`: %s/\s\+$//g`清理。 --- ### 相关问题 1. 如何在Vim中批量删除行尾空格? 2. 如何配置`vim-easy-align`插件以实现自定义对齐规则? 3. Vim中如何通过正则表达式实现多行文本的复杂对齐? [^1]: [vim 快捷命令](#) [^3]: [Linux中vim编辑器的快捷键使用方法](#) [^4]: [gvim对齐指定字](#)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值