_rotl8, _rotl16
Collapse the table of content
Expand the table of content
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here. ArchiveDisclaimer

_rotl8, _rotl16

Microsoft Specific

Rotate the input values to the left to the most significant bit (MSB) by a specified number of bit positions.

unsigned char _rotl8( 
   unsigned char value, 
   unsigned char shift 
unsigned short _rotl16( 
   unsigned short value, 
   unsigned char shift 


[in] value

The value to rotate.

[in] shift

The number of bits to rotate.

The rotated value.

Intrinsic Architecture


x86, IPF, x64


x86, IPF, x64

Header file <intrin.h>

Unlike a left-shift operation, when executing a left rotation, the high order bits that fall off the high end are moved into the least significant bit positions.

// rotl.cpp
#include <stdio.h>
#include <intrin.h>

#pragma intrinsic(_rotl8, _rotl16)

int main()
    unsigned char c = 'A', c1, c2;

    for (int i = 0; i < 8; i++)
       printf_s("Rotating 0x%x left by %d bits gives 0x%x\n", c,
               i, _rotl8(c, i));

    unsigned short s = 0x12;
    int nBit = 10;

    printf_s("Rotating unsigned short 0x%x left by %d bits gives 0x%x\n",
            s, nBit, _rotl16(s, nBit));


Rotating 0x41 left by 0 bits gives 0x41
Rotating 0x41 left by 1 bits gives 0x82
Rotating 0x41 left by 2 bits gives 0x5
Rotating 0x41 left by 3 bits gives 0xa
Rotating 0x41 left by 4 bits gives 0x14
Rotating 0x41 left by 5 bits gives 0x28
Rotating 0x41 left by 6 bits gives 0x50
Rotating 0x41 left by 7 bits gives 0xa0
Rotating unsigned short 0x12 left by 10 bits gives 0x4800
© 2015 Microsoft