c语言rotl函数需要什么头文件,_rotl, _crotl, _lrotl

_rotl, _crotl, _lrotl:循环左移

unsigned short _rotl(unsigned short value, int count);

unsigned char _crotl(unsigned char value, int count);

unsigned long _lrotl(unsigned long value, int count);

#include

std

value:整数值,_rotl:16位无符号整数,_crotl:8位无符号整数,_lrotl:32位无符号整数

count:循环左移的位数

value 循环左移 count 位的值

╭─

─ 高位移出低位移入 ─

─╮

╰←

1

1

0

1

0

1

0

1

←╯

╭─

─ 高位移出低位移入 ─

─╮

╰←

1

0

1

0

1

0

1

1

←╯

╭─

─ 高位移出低位移入 ─

─╮

╰←

0

1

0

1

0

1

1

1

←╯

╭─

─ 高位移出低位移入 ─

─╮

╰←

1

0

1

0

1

1

1

0

←╯

void __fastcall TForm1::Button1Click(TObject *Sender)

{

unsigned short v = 0xC8A5;       //     1100100010100101        原始数据:C8A5

int            c = 3;            //  110 ← 0100010100101        从高位移出3位

unsigned short x = _rotl(v, c);  //        0100010100101 ← 110  从低位移入

//     0100010100101110        运算结果:452E

UnicodeString s;

s.sprintf(L"_rotl(0x%04X, 0x%04X) = 0x%04X", v, c, x);

Memo1->Lines->Add(s);

}

bb024da521a733b40b6ad025fbcbefc4.png

由于 _rotl, _crotl, _lrotl 这一组函数不是标准 C/C++ 函数,从测试结果,即下面的表格来看,Embarcadero 已经抛弃这个函数了,

尽管 Visual C++ 也保留了这一组函数,但是 Embarcadero 不想在 C++ Builder 里面继续保留这一组函数了。

如果想在 64 位程序里面使用这一组函数,需要按照规则自己写,例如 _rotl(v, c) 可以用 (v<>(16-c)) 实现。

bcc32

clang32

clang64

_rotl

_crotl

_lrotl

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值