牛客网错题总结(c语言)

x|(x+1)统计0的个数,循环把x的二进制中从右往左数的最后一位0变成1,直到变成全1的时候x+1就溢出为全0,循环结束。x&(x-1)统计1的个数,循环把x的二进制中从右往左数的最后一位1变成0,直到变成全0,循环结束。

做题时对于符号的优先级不清楚导致出错,同时没有系统性的拆分

a+=a-=a+a可以拆分为1.a-=a+a,此时a=-9,2.a+=a;所以结果为-18

1.C/C++中浮点数由符号位、阶码和尾数构成,其二进制表示并不直接对应浮点数的大小,因此浮点数类型不能进行位运算否则编译器报错

2.虽然浮点数标准IEEE 754满足除法和乘法的交换律,不满足加法结合律

3.浮点数存在误差,直接比较大小往往不是预期的结果;

1. 方便管理内存缓冲区:如果用指针 char* 代替 char data[0] 来指向新开辟的空间,需要两次malloc也需要两次free。用char data[0],一次malloc即完成,方便管理缓冲区。

2. 减少内存碎片化:如果在struct尾部用指针*指向新开辟的buffer长度,struct本身相较buffer长度是很小的,即碎片化的内存。而用char data[0]指向新开辟的buffer,只需一次malloc,struct和buffer的空间是连续的。即减少了内存的碎片化。

3. 节省空间,相较用指针指向新开辟的str,data[0]是不占用内存的,而指针占用4字节。

 1. 条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。因此 max=(a>b)?a:b可以去掉括号而写为 max=a>b?a:b
2. 条件运算符?和:是一对运算符,不能分开单独使用。
3. 条件运算符的结合方向是自右至左

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值