使用无符号数字进行图像边界检查

Image bounds checking with unsigned numbers

本文关键字:图像 边界 检查 无符号 数字      更新时间:2023-10-16

我有一个由 2D 矩阵表示的图像,由 size_t 索引。我不想有一个函数,你给出一个位置,如果该位置在该图像的边界内,它会返回。

我会使用这种功能的地方,是在洪水填充算法中,我会在检查一个像素后,将其周围的 4 个像素推送到队列中。如果我正在检查的像素位于 0 x 或 y 上,则会出现问题,这意味着 inBounds 函数将被调用 (x - 1, y) 和 (x, y - 1)。由于size_t无符号,我无法合理地检查 x 或 y 是否<0。

我该如何处理这些情况?我是否应该只检查底部和左侧边界,并假设如果给定的位置在图像的上方或右侧,无论如何它都会是一个巨大的数字?

只需将size_t值强制转换为 (static_cast) 到每次在也涉及符号整数的操作中使用它们时signed int

通常,混合使用有符号和无符号数字不是一个好主意。 无符号数字只不过是一种黑客攻击,允许相同位数的两倍范围,就像任何黑客攻击一样,它们已经造成、正在造成并将给全世界的程序员带来无数问题。 这就是为什么像Java这样的某些语言完全废除了它们。 当我第一次从C++转到java时,我真的很想念无符号的数字,但过了一段时间,"我学会了不再担心,喜欢炸弹。