1、判断奇数偶数 最先想到的是 模2运算
这里有个小技巧:奇数 num&1==1 ;偶数 num&1==0(或者!=1)
使用时最好加上括号(),在牛客网测试时没加括号,导致不能通过用例!
---------------------------------------分割下-----------------------------------------------------------
2 、总结下 原码补码 反码
原(补、反)码在计算机中用来表示带符号数的,所以它的本质还是数。既然是数字,数字发明出来就是用来计量的(数数的),而计量系统必然存在两个核心元素------容量和精度。容量就是这个计数系统包含的所有的状态个数,又称为模。
1位10进制数,容量为10,0至9,一共10个数;
2位10进制数,容量为100, 0至99,一种100个数;
1位二进制数,容量为2,0、1,一共两个数;
8位二进制数,容量为256,00000000到11111111;
钟表,容量为12,1到12,共12个状态;(什么你说还有分和秒,这位同学你出)
以钟表为例,假设时针指在12点,
顺时针转1下,到1点,逆时针转11下也到1点。
顺时针转2下,到2点,逆时针转10下也到2点
。。。
顺时针转11下,到11点,逆时针转1下也到11点
用数学语言表述就是
顺时针12+1=13,13-12=1,因为13不在计量系统内,需舍弃掉进位;逆时针12 -11 = 1,
顺时针12+2=14,14-12=1,因为14不在计量系统内,需舍弃掉进位;逆时针12 -10 = 11 ,
=2
顺12+11=23,23-12=11;逆 12-1=11
可以看到模为12的情况下,12+1 和12-11的结果是一致的。同样的 12 +2 =12 -10,等等,我们称1和11,2和10 这样的数互为补数。也就是说在钟表计量系统内 减法可以通过加法来实现-------减去一个数就等于加上这个数的补数。先记下这个法则。
求补数。观察钟表,我们发现,互为补数的两个数,它们的和即为钟表计量系统的模。也就是A的补数=模-A。我们在前面举了很多计量系统,并给出了他们的模。一个计量系统(以0开始计数,精度为1)的模等于计量系统内最大值加1。(钟表计数从1开始)
回归计算机。数值表示有原码了,为什么还要用补码?原来,计算机中只有加法器,没有减法器。主要是因为减法器门电路设计太复杂,不划算。那怎么才能实现减法呢?当当当,上面提到的法则告诉我们了,有木有! 减去一个数 等效于加上这个数的补数。这样就可以通过加法器来实现减法了。以9-5为例,5的补数就是应该是模减5,模等于最大值11111111加1,11111111+1-00000101 = 11111111 - 00000101 +1。是不是想起了什么?没错,这不就是传说中的补码求解方法----取反加1 么。所以在计算机中负数直接存储为它的补数,也就是用补码表示。正数的原码与补码相同,所以计算机将数值都直接用补码表示。
这里有个小问题,+0 原码是00000000 ,-0的原码是10000000。而0的补码只有一个00000000. 10000000用来表示-128,这一点尚未搞清。