具有无符号类型的特征运算

时间:2016-12-09 00:24:07

标签: c++ eigen

我使用Eigen来计算unsigned char类型的两个矩阵之间的差异。

 Eigen::Matrix<unsigned char, 4, 1> C0;
 Eigen::Matrix<unsigned char, 4, 1> C1;
 C0 << 255, 0, 127, 1;
 C1 << 0, 255, 128, 255;
 std::cout << (C0 - C1).cast<int>() << "\n";

结果为255 1 255 2。我希望操作在下溢的情况下饱和(如果是添加则溢出),导致255 0 0 0。这可能与Eigen有关吗?

1 个答案:

答案 0 :(得分:2)

Eigen内部没有任何内容可供使用。您可能会provide a custom type重载operator+operator-等,就像您想要的那样。

当然,理想情况下,这应该使用饱和SIMD指令(例如,_mm_subs_epi8如果你有SSE2)在内部,但这并不是很容易集成到Eigen中 - 特别是如果你的矩阵大小不是16的倍数字节。