使用cutoff从C转换为C中的char

Dzu*_*yen 0 c

我需要在C中将int转换为unsigned char.如果int> 255 char将是255,如果in <0 char将为0.否则char等于int.我怎么用C做到这一点?

我试过了:

int i;
unsigned char c;
c = (unsigned char) i;
Run Code Online (Sandbox Code Playgroud)

但它尚未奏效(它包裹,即c = i%256).

Dav*_*rtz 5

只需编写您想要的代码.

unsigned char convert(int j)
{
    if (j >= 255) return 255;
    if (j < 0) return 0;
    return (unsigned char) j;
}
Run Code Online (Sandbox Code Playgroud)

这可能会更好(在我的机器上,6条指令,没有分支),特别是如果大多数值在0-255范围内:

unsigned char convert(int j)
{
    unsigned char j2 = (unsigned char) j;
    if (j == j2) return j2;
    return (j < 0) ? 0 : 255;
}
Run Code Online (Sandbox Code Playgroud)

  • @DzungNguyen如果它有更多指令,那只是因为它无法优化.如果无法优化,则无法进行优化.尽可能清楚地写出你的意思,如果编译器可以优化它,它就会. (2认同)
  • @DzungNguyen:编写可读且易懂的代码.首先将优化保留给编译器.现代编译器通常比大多数人更聪明.如果**f**真的证明在基准测试,配置文件中太慢,那么优化热点. (2认同)