java不支持无符号整数?
问出这个问题来说明你这个C程序员是不合格的。
你只知道C里有"unsigned"类型,却不知道这种数据的存储方式。
事实上,不论unsigned还是signed,整型数据的存储方式都是完全一样的,都是补码表示法,是不是signed无关,跟±运算也无关。
比如简单一点,一个8位整数,unsigned是0-255,signed是-128~127。两者的存储方式完全相同,±运算也完全相同。区别是你看数据时的理解方式,比如8位全1,unsigned 理解为255(再+1变成0),而signed理解为-1(再+1也是0)。这就是补码表示法的精髓,有无符号无差别,甚至加减法也几乎无差别:补码表示下,减法就是取反+1。你可以在C或java代码里验证:a-b,和a+(~b)+1,二者是一样的。
回到题主的问题,当然先要明确程序员需要unsigned类型的原因和用途,不过据我的经验,通常都只是用来计数,也只涉及到加减法和比较(比大小就是减法)。一般来说,直接改成signed就好,加减法照常使用,唯一的,在做比较时,需要稍稍处理一下,比如:
两个整数a,b用int存储(实际是unsigned,可能超231,此时int会理解为负数),两者比大小不要直接if(a<b),要改成:
int c=a-b;
if(c<0)
…
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有