编程技巧的零散学习

1、不使用if/:?/switch及其他判断语句如何找出两个int型变量中的最大值和最小值?

int max=((a+b)+abs(a-b))/2;
int min=((a+b)-abs(a-b))/2;

2、比较运算符(> >= < <=)运算顺序是从左往右,赋值运算符运算顺序从右向左

3、如何使用一条语句实现x是否为2的若干次幂的判断?
如果一个数为2的若干次幂,则其二进制的最高位肯定为1,其他位为0,该数减去1后其二进制全为1,将两数进行与操作,判断结果是否为0,可以实现判断x是否是2的若干次幂

(i&(i-1))?true:false

4、逗号表达式
逗号表达式的运算过程为从左往右逐个计算表达式;逗号表达式作为一个整体,它的值为最后一个表达式的值;逗号运算符的优先级在所有运算符中最低。

5、\n与\n\r
换行(\n)就是光标下移一行却不会移到行的开头,回车(\r)就是回到当前行的开头却不向下移一行
按Enter键就是\n\r,一般意义上的回车

Tab是制表符\t,作用是预留8个字符的显示宽度,用于对齐

6、短路求值
所谓的短路求值就是对于(条件1&&条件2),若条件1是false则条件2的表达式会被忽略。对于(条件1||条件2),若条件1为true,则条件2的表达式则被忽略了。

7、printf(“%p\n”,(void*)x)与printf(“%p\n”,&x)有什么区别?
printf(“%p\n”,(void*)x):语句打印x被转换为指针的地址,就是它的值。
printf(“%p\n”,&x)将打印变量x的地址。

8、printf()函数是否有返回值?
有,printf()函数返回一个int值,表示被打印的字符数

#include<iostream>
using namespace std;

int main()
{
      int i=1234;
      printf("%d\n",printf("&d\n",printf("%d\n",i)));
      return 0;
}
//程序输出结果
//1234
//5
//2

注意:’\n’也占据一个字符

9、不能使用任何变量,实现计算字符串长度函数Strlen()

int Strlen(const char* s)
{
   if(*s!='\0')
         return 1+Strlen(++s);
   else  
         return 0;
 }

10、负数除法与正整数除法的运算原理
除号的正负取舍和一般算数一样,符号相同为正,相异为负;
求余符号的正负取舍与被除数符号相同。

11、main()函数执行完毕后,是否可以再执行一段代码?
可以。比如用_onexit注册一个函数,它会在卖你之后执行int fn(void)。需要注意的是,使用_onexit函数需要添加头文件stdlib.h,否则会编译错误

#include<stdio.h>
#include<stdlib.h>

int fn()
{
      printf("next\n");
      return 0;
}

int main()
{
       _onexit(fn);
       printf("this is executed first\n");
       return 0;
 }
 //程序输出结果
 //this is executed first
 //next
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值