设置给定位数的整数到字节

Max*_*Max 5 .net c#

我不知道该怎么称呼这个,这使谷歌搜索变得更难.

比方说3,我有一个整数,并希望将其转换为11100000,即从最重要的位开始设置整数位数值的字节.

我猜它可以用:

byte result = 0;
for(int i = 8; i > 8 - 3; i--)
    result += 2 ^ i;
Run Code Online (Sandbox Code Playgroud)

但有什么更快/更好,或者最好是.net中包含标准库?

Hen*_*man 11

int n = 3; // 0..8 
int mask = 0xFF00;
byte result  = (byte) (mask >> n);
Run Code Online (Sandbox Code Playgroud)


Mat*_*dge 5

因为只有几种可能性,你可以只缓存它们:

// Each index adds another bit from the left, e.g. resultCache[3] == 11100000.
byte[] resultCache = { 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0XF8, 0xFC, 0xFE, 0xFF };
Run Code Online (Sandbox Code Playgroud)

如果你不小心试图获得n> 8的值,你也会得到一个异常而不是一个无声错误.