如何在不丢失位的情况下执行c的移位?

m4l*_*90n 3 c operators shift

在C中你做这样的事情:

char var = 1;

while(1)
{
  var = var << 1;
}
Run Code Online (Sandbox Code Playgroud)

在第8次迭代中,"<<"运算符将移出1并且var将为0.我需要执行移位以保持位移位.换句话说,我需要这个:

首字母----- 00000001

第一班 - 00000010

第二班 - 00000100

第3班 - 00001000

第四班 - 00010000

第五班 - 00100000

第6班 - 01000000

第7班 - 10000000

第8班 - 00000001(第8班,自动重启)

有没有相当于"<<"的东西,但实现这一点?

Oli*_*rth 5

这称为循环移位,但C在语言级别不提供此功能.

您要么必须自己实现,要么采用内联汇编程序例程,假设您的平台本身具有此类指令.

例如:

var = (var << 1) | (var >> 7);
Run Code Online (Sandbox Code Playgroud)

(signed但是,对于负面类型,这没有明确定义,因此您必须将示例更改为unsigned char.)