N进制数字及“移码”应用

题目及初始解答来自于《Microsoft SQL Server 2008技术内幕:T-SQL查询》的附录A。

原题目:最少的秤砣数量

为了用秤称出从1到100磅之间任意整数的重量,最少需要多少个秤砣?此外,你能把解决方案推广到1到n的范围吗?

解答:参见http://download.csdn.net/detail/jingtianwen/4445263

这个解答,先是只允许秤砣放在一侧,就像初中高中的物理实验时一样:砝码只能放在右托盘。这样,对于每个秤砣的作用就只有两种状态:使用与不使用。而这两种状态可以对应于一个二进制位的两种取值。而每个秤砣所起到的作用(权值)又对应于一个二进制数字相应位的权值。这样,N个秤砣的状态就对应于一个N位二进制串的各个状态。秤砣状态所表达的意义与这个二进制串的值也是相对应的。

后来的扩展,允许每个秤砣放在天平托盘的两侧,这样,每个秤砣的使用状态就有了三种选择:放在左托盘、放在右托盘和不使用。根据上面的用法和二进制的对应,很容易联想到现在的用法和三进制的对应。

但是,在原解答中,位的权值系数有可能为-1,0,+1。想到这里时,我的思维还停留在基础二进制的形式上,只有0和1,可能下意识里就认为只能表示为非负数,而现在要表达的数字里有负数,应该怎么办?我第一个想到的就是偏移。把权值系数+1,就得到了0,1, 2三个非负数字。这样,在表达称重为0时的数字就是111…111。各位再减去1,就可以得到对应的数值。

后来我才发现,这种解决方法其实和移码如出一辙。

不过,就在我写下这些时,我又想到,只要脱离了计算机的二进制基础,就得用数个二进制位表达一个权值系数,想要扩展,最简单的可以想到用有符号整型来表示,而这个类型本身是可以表示负数的,所以上面的“移码”处理其实没什么必要。题目里的“移码”得打上引号了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值