1.算数运算符:加、减、乘、除、取余(+、-、*、/、%);
2.赋值运算符:非阻塞赋值、阻塞赋值(=、<=);
3.关系运算符:大于、小于、等于、不等于、大于等于、小于等于(>、<、==、!=、>=、<=);
4.逻辑运算符:与、或、非(&&、||、!);
5.条件运算符:(?:);
6.位运算符 :(~、|、^、&、^~);
7.移位运算符:循环左移、循环右移(<<、>>);
8.拼接运算符:位拼接({});
算术运算符:
+:加法运算或者正值运算,a+b、+a
— :减法运算或者负值运算:a—b、—a
* :乘法运算:a*b
/ :除法运算:a/b
% :求余运算:a%b,%两侧的数据必须为整型数据;
位运算符:
Verilog HDL作为一种硬件描述语言,在电路中信号进行与或非时,反映在Verilog HDL中则是相应的操作数的位运算。Verilog HDL提供了以下五种位运算符:
~ :按位取反 a=1001 ~a=0110
& :按位与 a=1001 b=0001 a&b=0001
| :按位或 a=1001 b=0001 a|b=1001
^ :按位异或 a=1001 b=0001 a^b=1000
^~ :按位同或(异或非) a=1001 b=0001 a^~b=0111
两个长度不同的数据进行位运算时,系统会自动地将两个数据从右端开始对齐,位数少的操作数在高位进行补0.
逻辑运算符:
&&:逻辑与:a&&b,a和b同时为真时才为真,否则为假
||:逻辑或:a||b,a和b同时为假时才为假,否则为真
! :a为真时,!a为假
条件运算符:
“?”用于判断条件是否成立,具体用法如下:
assign a = (b)?4'b1:4'b0; 如果b为真,那么a = 4'b1,否则a = 4'b0
关系运算符:
a < b :a小于b
a > b :a大于b
a == b :a等于b
a != b :a不等于b
a <= b :a小于或等于b
a >= b :a大于或等于b
移位运算符:
在Verilog HDL中有两种移位运算符:<< (左移位运算符) 和 >>(右移位运算符)。其使用方法如下:a>>n或a<<n,a是操作数,n表示移动几位,这两种移位运算都用0填补移出的空位。
reg [3:0] a,c;
reg [5:0] b;
a = 4'h1001;
b = a<<2; 此时b=6'h100100
c = a>>2; 此时c=4'h0010
左移位数增加,右移位数不变
位拼接运算符:
位拼接运算符可以把两个或多个信号的某些位拼接起来进行运算操作。其使用方法如下:
{数据1的某几位,数据2的某几位,…,…,数据n的某几位}
a = 4'h1101;
b = 6'h111000;
c = 2'h11;
d = {a[3],b[2:0],c};此时d = 100011
e = {2{b}}; 此时e = {b,b} = 111000111000
f = {a,b,2{a,c}} 此时f = {a,b,a,c,a,c} = 111111000110111110111
运算符优先级:
| ! ~ | 最高优先级 |
|---|---|
| * ;/ ;% | 次高 |
| +;– | 高 |
| <<;>> | |
| <;<=;>;`>= | |
| ==;!= | |
| & | |
^;^~ | |
| && | 低 |
|| | 次低 |
| ?: | 最低优先级 |
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg
请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是
@raw_array[i]=~/[\W]/非常简单的正则表达式。当我用一些非拉丁字母(具体来说是俄语)尝试时,条件是错误的。我能用它做什么? 最佳答案 @raw_array[i]=~/[\p{L}]/使用西里尔字符进行测试。引用:http://www.regular-expressions.info/unicode.html#prop 关于ruby-正则表达式将非英文字母匹配为非单词字符,我们在StackOverflow上找到一个类似的问题: https://
我需要一个非常简单的字符串验证器来显示第一个符号与所需格式不对应的位置。我想使用正则表达式,但在这种情况下,我必须找到与表达式相对应的字符串停止的位置,但我找不到可以做到这一点的方法。(这一定是一种相当简单的方法……也许没有?)例如,如果我有正则表达式:/^Q+E+R+$/带字符串:"QQQQEEE2ER"期望的结果应该是7 最佳答案 一个想法:你可以做的是标记你的模式并用可选的嵌套捕获组编写它:^(Q+(E+(R+($)?)?)?)?然后你只需要计算你获得的捕获组的数量就可以知道正则表达式引擎在模式中停止的位置,你可以确定匹配结束
我明白了:x,(y,z)=1,*[2,3]x#=>1y#=>2z#=>nil我想知道为什么z的值为nil。 最佳答案 x,(y,z)=1,*[2,3]右侧的splat*是内联扩展的,所以它等同于:x,(y,z)=1,2,3左边带括号的列表被视为嵌套赋值,所以它等价于:x=1y,z=23被丢弃,而z被分配给nil。 关于ruby-带括号和splat运算符的并行赋值,我们在StackOverflow上找到一个类似的问题: https://stackoverflow
我想从then子句中访问case语句表达式,即food="cheese"casefoodwhen"dip"then"carrotsticks"when"cheese"then"#{expr}crackers"else"mayo"end在这种情况下,expr是食物的当前值(value)。在这种情况下,我知道,我可以简单地访问变量food,但是在某些情况下,该值可能无法再访问(array.shift等)。除了将expr移出到局部变量然后访问它之外,是否有直接访问caseexpr值的方法?罗亚附注我知道这个具体示例很简单,只是一个示例场景。 最佳答案
这是一个例子:s="abcd+subtext@example.com"s.match(/+[^@]*/)Result=>"+subtext"问题是,我不想在其中包含“+”。我希望结果是“潜台词”,没有+ 最佳答案 您可以在正则表达式中使用括号来创建匹配组:s="abcd+subtext@example.com"s=~/\+([^@]*)/&&$1=>"subtext" 关于ruby-正则表达式-排除一个字符,我们在StackOverflow上找到一个类似的问题:
我们有一个字符串:“”这个正则表达式://i如何从当前字符串中获取所有匹配项? 最佳答案 "".scan(//)参见scan在ruby-docs上 关于ruby-如何遍历Ruby中所有正则表达式匹配的字符串?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6857852/
我正在尝试通过正则表达式拆分参数列表。这是一个带有我的参数列表的字符串:"a=b,c=3,d=[1,3,5,7],e,f=g"我想要的是:["a=b","c=3","d=[1,3,5,7]","e","f=g"]我试过先行,但Ruby不允许使用动态范围后行,所以这行不通:/(?如何让正则表达式忽略方括号中的所有内容? 最佳答案 也许这样的东西对你有用:str.scan(/(?:\[.*?\]|[^,])+/)编辑再三考虑。简单的非贪婪匹配器在某些嵌套括号的情况下会失败。 关于Ruby正则