常见的关系运算符(移位运算符)

写在前面的话

移位运算符是双目运算符,将运算符左边的操作数左移或右移指定的位数,用0来补充空闲位。如果右边操作数的值为X或Z,则移位结果为未知数X。在应用以为运算符的时候一定要注意它的这个特性,那就是空闲位用0来填充,也就是说,一个二进制数不管原数值是多少,只要一直移位,最终全部会变为0。

移位运算符实例

Verilog HDL 中有两种移位运算符:<<(逻辑左移)和>>(逻辑右移)。梦翼师兄编写实例如下:


/****************************************************

*   Engineer        :   梦翼师兄

*   QQ               :   761664056

*   The module function:移位运算符模块

*****************************************************/

01  module shift(clk,rst_n,a,b);

02  input clk;

03  input rst_n;

04

05  output reg [3:0]a;

06  output reg [3:0]b;

07

08  always@(posedge clk or negedge rst_n)

09      begin

10          if(!rst_n)

11              begin

12                  a<=1;

13                  b<=4;

14              end

15          else

16              begin

17                  a<=(a<<1);

18                  b<=(b>>1);

19              end

20      end

21  endmodule

编写测试代码如下


/****************************************************

*   Engineer        :   梦翼师兄

*   QQ              :   761664056

*   E_mail          :   [email protected]

*   The module function:移位运算符测试模块

*****************************************************/

01  `timescale 1ns/1ps

02  module tb;

03  reg clk;

04  reg rst_n;

05

06  wire [3:0]a;

07  wire [3:0]b;

08

09  initial

10      begin

11          clk=0;

12          rst_n=0;

13          # 1000.1 rst_n=1;

14      end

15

16  always # 10 clk=~clk;

17

18  shift shift(

19      .clk(clk),

20      .rst_n(rst_n),

21      .a(a),

22      .b(b)

23   );

24

25  endmodule

查看仿真波形如下

从仿真图,可以看出,每次a都向左边移动移位,后面补充0,直到把逻辑1溢出,后面就一直为0了。每次b都向右边移动移位,前面补充0,直到把逻辑1溢出,就一直为0了。

总结:移位运算符的使用时,左移一位可以看成是乘以2,右移一位可以看成是除以2。所以移位运算符用在计算中,代替乘法和除法。尤其是除法,使用移位的方式,可以节省资源。但使用的前提是数据位宽要进行拓展哦,不然就全部是零了。

原文地址:https://www.cnblogs.com/mengyi1989/p/11515977.html

时间: 2024-08-29 01:04:56

常见的关系运算符(移位运算符)的相关文章

7.Java移位运算符和赋值运算符

一.移位运算符 移位运算符也针对二进制的“位”,它主要包括:左移位运算符(<<).右移位运算符(>>>).带符号的右移位运算符(>>).其中: 左移运算符用“<<”表示,是将运算符左边的对象,向左移动运算符右边指定的位数,并且在低位补零.其实,向左移 n 位,就相当于乘上 2 的 n 次方. 右移运算符用符号“>>>”表示,是将运算符左边的对象向右移动运算符右边指定的位数,并且在高位补 0,其实右移 n 位,就相当于除上 2 的 n

C语言的移位运算符

C的移位位运算符.移位运算符向左或向右移动位. 1.左移:<< 左移运算符(<<)将其左侧运算对象每一位的值向左移动其右侧运算对象指定的位数. 左侧运算对象移出左末端位的值丢失,用0填充空出的位置. 下面例子中,每一位都向左移动两个位置:    (10001010)  << 2  //表达式 (00101000)  << 2  //结果值 该操作产生了一个新的位值,但是不改变其运算对象.例如,假设stonk为1,那么stonk << 2为4,但是

运算符--&gt;位移运算符和一些其他运算符

移位运算符 移位运算符就是在二进制的基础上对数字进行平移.按照平移的方向和填充数字的规则分为三种:<<(左移).>>(带符号右移)和>>>(无符号右移).在移位运算时,byte.short 和 char 类型移位后的结果会变成 int 类型,对于 byte.short.char 和 int 进行移位时,规定实际移动的次数是移动次数和 32 的余数,也就是移位 33 次和移位 1 次得到的结果相同.移动 long 型的数值时,规定实际移动的次数是移动次数和 64 的

位移位运算符

  位移位运算符 位移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算.位移位运算符分为左移和右移两种,均为双目运算符.第一运算对象是移位对象,第二个运算对象是所移的二进制位数. 移位时,移出的位数全部丢弃,移出的空位补入的数与左移还是右移花接木有关.如果是左移,则规定补入的数全部是0:如果是右移,还与被移位的数据是否带符号有关.若是不带符号数,则补入的数全部为0:若是带符号数,则补入的数全部等于原数的最左端位上的原数(即原符号位).具体移位规则如下所示. 位移位运算符的优先级如

移位运算符(JAVA)

java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>     :     右移运算符,num >> 1,相当于num除以2 >>>    :     无符号右移,忽略符号位,空位都以0补齐 1. 左移运算符 左移运算符<<使指定值的所有位都左移规定的次数.1)它的通用格式如下所示:value << numnum 指定要移位值value 移动的位数.左移的规则只

java移位运算符详解[转]

java移位运算符不外乎就这三种:<<(左移).>>(带符号右移)和>>>(无符号右移). 1. 左移运算符 左移运算符<<使指定值的所有位都左移规定的次数. 1)它的通用格式如下所示: value << num num 指定要移位值value 移动的位数. 左移的规则只记住一点:丢弃最高位,0补最低位 如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模.如对int型移动33位,实际上只移动了332=1位. 2)运算规则 按

【ThinkingInC++】13、输出移位运算符的操作

头文件 /** * 功能:输出移位运算符的操作 * 时间:2014年8月12日20:01:32 * 作者:cutter_point */ #ifndef PRINTBINARY_H_INCLUDED #define PRINTBINARY_H_INCLUDED #include<iostream> using namespace std; void printBinary(const unsigned char val) { for(int i=7 ; i != -1 ; --i) { if(

java移位运算符详解

java移位运算符不外乎就这三种:<<(左移).>>(带符号右移)和>>>(无符号右移).1.左移运算符左移运算符<<使指定值的所有位都左移规定的次数.1)它的通用格式如下所示:value << numnum 指定要移位值value 移动的位数.左移的规则只记住一点:丢弃最高位,0补最低位如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模.如对int型移动33位,实际上只移动了332=1位. 2)运算规则按二进制形式把所有的

Java_C++_C# 移位运算符比较

Java语言的移位运算符 Java语言的移位运算符: <<, >>, >>>共3种. publicclass Test { publicstaticvoidmain(String[] args) { /* * 移位运算符只对byte,short,int,long和char类型有效 */ //有(无)符号数, 左移(<<),最高位符号位都将被右边的位覆盖 bytenum = (byte)0x8F; num<<= 1; System.out.p