当前位置:首页>猎头>某大厂员工爆料:兄弟被降职降薪,被猎头挖新公司时承诺45万年薪,结果签合同才发现这45万里有部分是股权激励,还得2年后才能兑现..

某大厂员工爆料:兄弟被降职降薪,被猎头挖新公司时承诺45万年薪,结果签合同才发现这45万里有部分是股权激励,还得2年后才能兑现..

  • 2026-09-12 22:39:43
某大厂员工爆料:兄弟被降职降薪,被猎头挖新公司时承诺45万年薪,结果签合同才发现这45万里有部分是股权激励,还得2年后才能兑现..

刚刷到这个帖子,我第一反应就是,猎头这嘴啊,真能把人说得心里发亮。兄弟本来就够惨了,先被老东家降职降薪,人还没缓过来,新机会一来肯定容易上头。

结果聊的时候是45万年薪,听着像翻身局,真到签合同才发现,哦,原来这45万不是45万,里面还掺了点股权激励,而且一锁就是两年。

这种操作最损的地方就在这儿,你不能说它全是假,它确实给你写进去了,但写进去和拿到手,差的可太远了。人都准备跳槽重开了,最后一看现金没涨多少,还顺手接了个画饼。HR估计一脸职业微笑,打工人拿着合同站那儿,心里应该就一句:这也算年薪?

今日算法题

这题表面上像位运算入门,真写的时候最容易犯的错,是把补数理解成“按机器字长直接取反”。

你拿 5 来看,二进制是 101。题目要的补数不是 32 位补全后整段翻转,而是只翻转它“有效位”这一段,也就是把 101 变成 010,结果才是 2。这地方要是上来一个 ~5,在 Python 里你会得到 -6,方向就已经跑偏了。

所以这题我一般先盯住一件事:先造一个和有效位长度一致的掩码,再去异或。掩码像什么?像 111。101 ^ 111 = 010,这就对了。

代码我更愿意写成这个样子,短一点,但意思是完整的:

classSolution:deffindComplement(self, num: int) -> int:if num == 0:return1        mask = 1        n = numwhile n:            mask = (mask << 1) | 1            n >>= 1return num ^ mask

这个写法有两个点比较稳。

第一,while n 这段不是在“求值”,是在数有效位,顺手把掩码拼出来。 假设 num = 10,二进制是 1010,循环结束后 mask = 1111,最后:

10 ^ 15 = 5

也就是:

10101111----0101

第二,它避开了 Python 里负数补码那套坑。很多人看到“补数”就本能想写:

return ~num

这在别的语言里还得看你后面怎么截位,在 Python 里更别碰,结果不是题目要的那个“有限长度翻转”。

当然,这题还可以再收一收,直接利用 bit_length()。线上写业务代码我会谨慎一点,但刷题这招挺顺手:

classSolution:deffindComplement(self, num: int) -> int:if num == 0:return1        mask = (1 << num.bit_length()) - 1return num ^ mask

这里的 num.bit_length() 本质上还是在求有效位数。 比如 num = 8,二进制 1000,长度是 4,那掩码就是:

(1 << 4) - 1 = 15

也就是 1111。

最后再说一句这题真正该记住的,不是“补数怎么求”,而是这种位运算题的判断顺序: 先别急着取反,先问清楚翻转范围到底到哪一位。范围一旦错了,后面全白算。

最新文章

随机文章