• MATLAB的两种移位运算


    MATLAB的两种移位运算:

    1)circshift矩阵移位

    circshift:循环移位数组

    语法:B = circshift(A,shiftize)

    说明:

    B  = circshift(A,shiftize)通过shiftize元素循环移位数组A中的值。shiftize是整数标量的向量,其中第n个元素指定数组A的第n维的移位量。如果移位中的元素为正,则A的值向下(或向右)移位。如果是负数,则A的值向上(或向左)移动。如果为0,则不移动该维度中的值。

    示例:

    将第一维值向下循环移动1. 
    A = [1 2 3; 4 5 6; 7 8 9] 
    A = 
         1      2      3 
         4      5      6 
         7      8      9

    B =环球(A,1)
    B = 
         7      8      9 
         1      2      3 
         4      5      6

    将第一维值向下循环1,将第二维值向左
    循环1. B = circshift(A,[1 -1]); 
    B = 
        8      9      7 
        2      3      1 
        5      6      4

    2)bitshift位移位

    bitshift:
    移位位指定的位数

    句法 :

    C = bitshift(A,k)
    C = bitshift(A,k,n)

    说明:

    C = bitshift(A,k)返回移位了k位的A的值。输入参数A必须是无符号整数或无符号整数数组。通过k移位与乘以2 ^ k相同。允许k的负值,这对应于向右移位,或者除以2 ^ abs(k)并截断为整数。如果移位导致C溢出无符号整数类A中的位数,则丢弃溢出位。

    C = bitshift(A,k,n)导致任何溢出n位的位被丢弃。n的值必须小于或等于A的无符号整数类的位长(例如,对于uint32,n <= 32)。

    而不是使用bithift(A,k,8)或n的另一个幂2,考虑使用bitshift(uint8(A),k)或适当的无符号整数类。

    例子:


    例1 
    将1100(12,十进制)移位到左边的两位产生110000(48,十进制)。
    C = bitshift(12,2)
    C = 
       48

    例2


    重复地将无符号16位值的位向左移位,直到所有非零位溢出。跟踪二进制的进度:
    a = intmax('uint16'); 
    disp(sprintf(... 
      '初始uint16值%5d是二进制中的%16s',... 
      a,dec2bin(a)))

    对于k = 1:16 
      a = bitshift(a,1); 
      disp(sprintf(... 
          'Shifted uint16 value%5d is binary 16s in binary',... 
          a,dec2bin(a)))
      end

    看后请点赞
  • 相关阅读:
    CodeForces
    处女座的测验(一)(素数筛+思维)
    Codeforces-D-Diverse Garland(思维)
    linux中open函数使用
    linux管道通信
    linux中memset的正确用法
    在linux中read、write函数
    Ubuntu+Win7+Samba实现文件共享
    【转】教你如何实现linux和W…
    《转》我的ARM学习经历
  • 原文地址:https://www.cnblogs.com/hyb221512/p/9417443.html
Copyright © 2020-2023  润新知