在C语言中用截断从int转换为char
我需要将int转换为C中的无符号字符。如果int>255,字符将是255,如果in<0,字符将是0。否则char等于int。在C中如何实现 我试过:在C语言中用截断从int转换为char,c,C,我需要将int转换为C中的无符号字符。如果int>255,字符将是255,如果in=255)返回255; 如果(j
int i;
unsigned char c;
c = (unsigned char) i;
但它还没有起作用(它是环绕的,即c=i%256)。只需编写您想要的代码即可
unsigned char convert(int j)
{
if (j >= 255) return 255;
if (j < 0) return 0;
return (unsigned char) j;
}
无符号字符转换(int j)
{
如果(j>=255)返回255;
如果(j<0)返回0;
返回(无符号字符)j;
}
这可能会执行得更好(在我的机器上,6条指令,没有分支),尤其是当大多数值在0-255范围内时:
unsigned char convert(int j)
{
unsigned char j2 = (unsigned char) j;
if (j == j2) return j2;
return (j < 0) ? 0 : 255;
}
无符号字符转换(int j)
{
无符号字符j2=(无符号字符)j;
如果(j==j2)返回j2;
返回值(j<0)?0:255;
}
只需编写您想要的代码即可
unsigned char convert(int j)
{
if (j >= 255) return 255;
if (j < 0) return 0;
return (unsigned char) j;
}
无符号字符转换(int j)
{
如果(j>=255)返回255;
如果(j<0)返回0;
返回(无符号字符)j;
}
这可能会执行得更好(在我的机器上,6条指令,没有分支),尤其是当大多数值在0-255范围内时:
unsigned char convert(int j)
{
unsigned char j2 = (unsigned char) j;
if (j == j2) return j2;
return (j < 0) ? 0 : 255;
}
无符号字符转换(int j)
{
无符号字符j2=(无符号字符)j;
如果(j==j2)返回j2;
返回值(j<0)?0:255;
}
这是可行的,但是否存在使用位操作的强制转换?或者memcpy?@Dzunguyen你有什么理由想让事情变得效率更低、更难理解吗?@Dzunguyen你要求根据某些情况改变价值。Casting和memcpy不会这样做。@DzungNguyen如果它有更多的指令,那只是因为它无法优化。如果它不能被优化,它就不能被优化。尽可能清楚地写下你的意思,如果编译器能优化它,它就会。@Dzunguyen:写可读和可理解的代码。首先将优化留给编译器。现代编译器通常比大多数人更聪明。如果这真的证明在基准测试、配置文件和优化热点方面太慢,那么这是可行的,但是有没有使用位操作的转换?或者memcpy?@Dzunguyen你有什么理由想让事情变得效率更低、更难理解吗?@Dzunguyen你要求根据某些情况改变价值。Casting和memcpy不会这样做。@DzungNguyen如果它有更多的指令,那只是因为它无法优化。如果它不能被优化,它就不能被优化。尽可能清楚地写下你的意思,如果编译器能优化它,它就会。@Dzunguyen:写可读和可理解的代码。首先将优化留给编译器。现代编译器通常比大多数人更聪明。如果这在基准测试中被证明太慢,请分析,然后优化热点。是否要将int
饱和为char
?有些处理器有这方面的指令。char
有实现定义的符号。如果您的意思是无符号字符
(当然,这是正确的使用类型),请不要要求字符
。是否要将int
饱和为字符
?有些处理器有这方面的指令。char
有实现定义的符号。如果您的意思是无符号字符
(当然,这是正确的类型),请不要要求使用字符。