近期一些学习的随笔

把原来搞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!

原文地址:https://www.cnblogs.com/guapisolo/p/13776752.html