编译器警告不要在按位操作中混合使用int和bytes。我能找到的创建字节常量的最好方法是构造函数语法byte(1)
,如下面示例代码的for循环所示。这是最好的方法吗?(除了定义我自己的常量后缀之外)
#include<vector>
using namespace std;
void drawMonochromeHLine(vector<byte>& screen, int width, int x1, int x2, int y) {
if (x2 < x1) swap(x1, x2);
//DCHECK(x1 >= 0);
//DCHECK((x2 >> 3) < width)
//DCHECK(y < height)
int yOffset = y * (width >> 3);
int si = (x1 >> 3) + yOffset;
int ei = (x2 >> 3) + yOffset;
int sbi = (~x1) & 0b111; // x1=6: 00000011. x1=1: 01111111
int ebi = (~x2) & 0b111; // x=7: 10000000. x2=1: 01111111
if (si == ei) {
for (byte mask = byte(1) << ebi; mask >= byte(1) << sbi; mask >>= 1)
screen[si] |= mask;
}
else {
for (byte mask = byte(1) << sbi; mask > byte(0); mask >>= 1)
screen[si] |= mask;
for (int i = si + 1; i < ei; ++i)
screen[i] = byte(0xff);
for (byte mask = byte(1) << 7; mask >= byte(1) << ebi; mask >>= 1)
screen[ei] |= mask;
}
}
2条答案
按热度按时间mnowg1ta1#
是的,最接近文字字节表达式的是Shawn提到的
byte{0}
,如cppreference std::byte page上的(底部)示例所示。没有literal suffix,如浮点或无符号。
yr9zkbsy2#
如果不使用byte us uint8_t,则不需要文字。用G++ 11 -std=c++17编译。