笔试题--反转一个字节

这道题很古老了,可别将它和大端转小端混淆了,所谓大端和小端指的是字节序,而这里反转一个字节说的是位序,算法更是不胜枚举,说实话都能达到目的,剩余的就是看看谁的效率更高了,基本上这是一个最难的问题,高手不是能写出最美丽的程序而是能写出既美丽同时效率又是最高的程序,如果一个人写的程序很美丽,很直观,只能说明该程序员对语言掌握的很好,但是语言毕竟只是工具,真正做事的是计算机,只有对计算机很了解,才能写出效率最高的程序,正如文学家的文笔很多不如花季少女,但是花季少女永远也超越不了时代。

不管什么样的程序,落实到底层的cpu都是那几样,尽量不要使用跳转,因为会清空流水线,相比之下,跳转的危害在x86机器上intel比AMD更甚,因为后者的流水线更浅;充分利用超标量cpu的超标量特性,也就是尽量使相邻指令不要关联,这样可以乱序执行,乱序执行就是将指令发射到不同的流水线序列;彻底理解cpu的HT特性,HT不一定会更好,因为它们毕竟是要共享一套算术单元,有时切换的开销会抵消对空闲周期的弥补,总的看来,cpu类型的程序应该避免使用HT,映射到进程/线程模型,并不是线程越多越好,当线程太少,不能利用多cpu特性,并且可能会使cpu闲置,但是太多的话又会引入切换/保存上下文开销,因此线程的数量和cpu数量相等或者比cpu数量大1个或者2个最好,因为强制和cpu数量相等会加大操作系统的运行开销,并且万一线程陷入IO没有替补,因此Windows的IO完成端口就设计的特别好,windows内核会限制完成端口上的活跃线程和创建时传入的参数一致,但是我并不赞成这种策略在内核实现,因此机制和策略严格分离的unix就没有这么做,你完全可以在用户空间通过cpu绑定和线程数量限制来调优;要尽可能的利用cpu的L1/L2 cache,理想情况就是,静态数据在cache中,该线程永不换出,cache永不刷新,但是这仅仅是一种理想,因此就要在理想和现实之间折中,将静态数据减少,既然不能将cache归为己有,那么也没有必要为止付出太多空间开销。

在上一段的指导下,高效的算法应该是很少的跳转,也就是很少的判断,不多不少的静态数据,该算法是cpu类型的,HT应关闭,如此的条件用汇编最好了,但是还要和另一个条件折中,这就是程序的美观性,于是还是用c吧:

unsigned char func( unsigned char c)

{

static unsigned char sta[16] = //不多不少的静态数据

{

0x00,0x08,0x04,0x0C,0x02,0x0A,0x06,0x0E,0x01,0x09,0x05,0x0D,0x03,0x0B,0x07,0x0F

};

unsigned char d = 0; //没有判断

d |= (sta[c&0xF]) << 4;

d |= sta[c>>4];

return d;

}

小声说一句,此题的解法甚多,比如可以定义一个大表,比如可以用二分法,或者按照管道的思想,一端进一端出,其实就是堆栈,将一个数按照一位一位的进入一个堆栈,然后再弹出,如果不是按位倒序,linux内核中有足够的算法供你参考,如果你在笔试时写上了linux内核的算法,那么考官最起码会觉得你说的读过内核并不假,但是可悲的是考官他自己不一定读过内核。要知道很多30岁以上的软件工程师都不一定能写出什么高效的算法,我们公司就有一批这样的可悲人群,乃不知有寄存器,无论堆栈!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在模拟芯片设计笔试中,选择题通常是考察对于模拟电路和芯片设计相关知识的理解和应用能力。题目的难度和类型可能会有所不同,下面我将简单回答此类题目的一般性特点。 首先,模拟芯片设计选择题往往会涉及到模拟电路的基本概念和理论知识,如放大器、滤波器、振荡器等。我们需要了解各种电路的工作原理、频率响应和稳定性等特性,以及其在芯片设计中的应用。此外,对于模拟电路中的元器件,如电容、电感、二极管和晶体管等,也需要熟悉其特性和工作原理。 其次,模拟芯片设计选择题还可能考察电路的分析和计算能力。例如,给定一个电路图形,要求计算某些电路参数或分析电路的性能。这需要掌握基本的电路分析方法和技巧,如基尔霍夫定律、戴维南-诺顿等效电路等。同时,还需要具备一定的数学基础,能够进行复数运算和解微分方程等。 此外,在模拟芯片设计选择题中,可能会提到一些常用的设计工具和软件,如SPICE软件、面向对象设计和硬件描述语言等。我们需要了解这些工具和软件的原理和使用方法,以及它们在芯片设计中的应用。 总体而言,在模拟芯片设计选择题中,强调对于模拟电路基本概念和理论的理解与应用,同时要求一定的计算和分析能力。为了更好地完成模拟芯片设计笔试题目,我们需要扎实的电路基础和数学基础,并且经常进行习题练习和实际项目实践,提高我们的设计和分析能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值