近期一些学习的随笔
把原来搞OI时置顶的游记都取消了
算是标志自己走向全新的生活吧
1.关于template的使用
可以使函数中的形参不受变量类型的限制,照常编写我们的函数
我把longlong int 或者自己定义的结构体类型扔进去都可以,不过往往需要正确地重载运算符
2.关于负数的二进制问题
对于有符号整型数x,-x的二进制表示为~(x-1),以下给出证明
假设x在二进制下有8位,由于计算时溢出的位直接被忽略(或者看成每次计算都会取模256),那么-x等价于+256-x!
又255-x == ~x,因此255-(x-1) == ~(x-1) 即256-x == ~(x-1)
大功告成
引申:树状数组的lowbit的证明
树状数组有这样一个结构 i+=i&(-i) ,其中i&(-i)表示i的最低位的1表示的数
这个在学OI的时候一直困扰着我 但因为感觉没啥用当时我也没管
我们假设最低位的1在第x位
有一个很显然的结论,当一个数-1时,i中最低位的1一定会变成0(先不考虑i=0)
对于第x位,原来是1,i-1后变成0,取反又变回1,与运算后这一位的1被保留了下来
对于低于x的位,原来都是0,i-1后一定都变成1,取反变成0,再与运算,这些位仍然是0
对于高于x的位,取反再与一定是0
最终我们成功保留了最低位的1!