一基础
1 位移操作
移位操作有两种类型,一种是逻辑移位(logical shift)和算术移位(arithmetic shift)。逻辑移位中被移出的位被丢弃,空缺位(variant bit)用0填充。算术移位中移出位被丢弃,空缺位用符号位填充。
在c/c++中,整数分为有符号和无符号两种类型,它们的移位操作有所区别。对于无符号整数,左移右移均采用逻辑移位;对于有符号整数,右移使用算术移位,左移使用逻辑移位。
所以对于有符号整数的右移,并不会改变整数的正负,但是左移中却有可能会改变。
2 负数存储
在机器里,有符号的整数的存储,对于负整数来说,它是用补码存储的,这里需要知道原码,反码和补码。原码指的本来的数据,反码则是对原码按位取反,补码则是对原码取反后加1,即补码=反码+1
以占两个字节长度的数据为例,它的取值范围是-32768-32767。
1000 0000 0000 0000(原码) --->0111 1111 1111 1111(反码)-->1000 0000 0000 0000(补码)
该补码的值是32768,因为它本来是负值,所以1000 0000 0000 0000(原码)表示的值即为-32768
1111 1111 1111 1111(原码)--->0000 0000 0000 0000(反码)-->0000 0000 0000 0001(补码),所以这里原码表示的值是-1
二 opencv矩阵元素类型
1 CV_MAKETYPE
创建矩阵的时候,有几个函数,下面是其中的
CvMat cvMat(introws,int