C++ 用C+;表示std::byte文本的正确方式是什么+;17?

C++ 用C+;表示std::byte文本的正确方式是什么+;17?,c++,byte,c++17,C++,Byte,C++17,编译器警告不要在按位操作中混合整数和字节。我能找到的创建字节文字的最佳方法是构造函数语法byte(1),如下面示例代码的for循环所示。这是最好的方式吗?(除了定义我自己的文字后缀) #包括 使用名称空间std; 虚线(矢量和屏幕、整数宽度、整数x1、整数x2、整数y){ 如果(x2=0); //DCHECK((x2>>3)3); int-si=(x1>>3)+yOffset; 国际指数=(x2>>3)+约夫特; int sbi=(~x1)&0b111;//x1=6:00000011.x1=1:

编译器警告不要在按位操作中混合整数和字节。我能找到的创建字节文字的最佳方法是构造函数语法
byte(1)
,如下面示例代码的for循环所示。这是最好的方式吗?(除了定义我自己的文字后缀)

#包括
使用名称空间std;
虚线(矢量和屏幕、整数宽度、整数x1、整数x2、整数y){
如果(x2=0);
//DCHECK((x2>>3)<宽度)
//DCHECK(y<高度)
int yOffset=y*(宽度>>3);
int-si=(x1>>3)+yOffset;
国际指数=(x2>>3)+约夫特;
int sbi=(~x1)&0b111;//x1=6:00000011.x1=1:0111111
int ebi=(~x2)&0b111;//x=7:10000000.x2=1:0111111
if(si==ei){
对于(字节掩码=字节(1)=字节(1)>=1)
屏幕[si]|=遮罩;
}
否则{
对于(字节掩码=字节(1)字节(0);掩码>>=1)
屏幕[si]|=遮罩;
对于(int i=si+1;i=1)
屏幕[ei]|=遮罩;
}
}

您自己的文字后缀有什么问题?使用
std::byte{1}
是cppreference建议的方法。@Ayxan没有问题;我只是想知道如果选择使用C++17而不扩展它,会使用什么。
#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;
    }
}