一个无符号整型unsigned int大于65535引发的问题

上周实验室搬家,小编的工位从二楼搬到了四楼。

按说,换个办公地点开通门禁卡权限是再正常不过的事情,但是,小编却遇到了一个问题。

毕竟是新环境,小编一大早就第一个冲到实验室,拿出门禁卡,“滴滴”……

门没开……

“滴滴”……

门又没开……

卧槽,难道是权限没开通?一阵懵逼后快速找到相关工作人员,说时迟那时快,只见可爱的小姐姐一顿操作猛如虎……系统在重刷我权限时,很礼貌的提示:

【ERROR】
错误原因:当前卡片ID的最后5位数字大于65535(ID>maxLimitID),系统无法正常运行门禁权限模块的功能。

???
万万没想到,竟然在这种场景下重新见识了unsigned int值不能超过65535的设定。

在我们最初学习C语言的时候,老师讲:

int & unsigned int

int类型4个字节,16bit(位),所以能表示162进制数(共216次方,也就是65536个值,0000000000000000~1111111111111111

int 的第一个字节是符号位,所以int的表示范围是-32768~32767
unsigned int 是无符号整型,表示范围是0~65535

大于65535的数字运算

既然整数类型最大只能表示65535,那大于65536的值怎么运算呢?
比如小编的门禁卡ID末尾5位,再比如那一年小编存储卡里的存款……或者马爸爸的存款?

这个问题大概想想,也能知道怎么做。小编最先想到的方法是数组封装。

比如,计算123456+123456,只需将123456在计算时变成

unsigned int num_pre["1", "2","3", "4", "5", "6"]

然后做关联运算即可。

当然,还有其他的算法,时间关系小编就不再整理实现。

同时,欢迎朋友们分享其他的方法和实现源码。

版权声明

弈心博客


本文首发site_name,转载请附上博文链接!