other
2000-01-01
2022-04-04
2022-04-04
乘法
func mul(a:Int, b:Int) -> Int {
var big = a > b ? a : b
var sma = a < b ? a : b
var sum = 0
while sma > 0 {
sum += sma & 1 == 0 ? 0 : big
sma = sma >> 1
big = big << 1
}
return sum
}
加法
int add(int a, int b) {
stack<bool> st;
bool x = false;
if((a < b && abs((long)a) > abs((long)b)) || (a > b && abs((long)a) < abs((long)b))){
x = true;
}
bool flag = false;
for (int i = 0; i < 31; i++) {
if((a&1) == 1 && (b&1) == 1){
st.push(flag);
flag = true;
} else if((a&1) == 1 || (b&1) == 1){
st.push(!flag);
flag = flag;
} else {
st.push(flag);
flag = false;
}
a = a >> 1;
b = b >> 1;
}
st.push(x);
int sum = 0;
while (!st.empty()) {
sum = (sum << 1) | (st.top() ? 1 : 0);
cout <<(st.top() ? 1 : 0);
st.pop();
}
return sum;
}
特征 | new/delet | malloc/free |
---|---|---|
分配内存的位置 | 自由存储区 | 堆 |
内存分配成功的返回值 | 完整类型指针 | void* |
内存分配失败的返回值 | 默认抛出异常 | 返回NULL |
分配内存的大小 | 由编译器根据类型计算得出 | 必须显式指定字节数 |
处理数组 | 有处理数组的new版本new[] | 需要用户计算数组的大小后进行内存分配 |
已分配内存的扩充 | 无法直观地处理 | 使用realloc简单完成 |
是否相互调用 | 可以,看具体的operator new/delete实现 | 不可调用new |
分配内存时内存不足 | 客户能够指定处理函数或重新制定分配器 | 无法通过用户代码进行处理 |
函数重载 | 允许 | 不允许 |
构造函数与析构函数 | 调用 | 不调用 |
n & -n == 从右向左数第一个1的位置
pip 支持轮子
import pip._internal.pep425tags
print(pip._internal.pep425tags.get_supported())
图片相关操作(imagemagick)
# brew install imagemagick
# 合并两张图片
convert +append a.jpg b.jpg result.jpg
# 如果要垂直组合照片,请在append参数之前用减号(–)替换加号(+)