C语言学习

将十进制转换为二进制(除二取余法  正整数的十进制)
    int main() {
        int number;
        printf("请输入:");
        scanf("%d",&number);
        //统计出number中一的个数(number所对应的二进制)
        int count;
        while(number){
            count += number % 2;
            number = numer / 2;
        }
        pritnf("个数为%d",count);
    }

    (右移位&运算符实现统计一的个数)
    int main() {
        int number;
        printf("请输入:");
        scanf("%d",&number);
        //统计出number中一的个数(number所对应的二进制)
        int count;
        //移位加按位&
        for(int i=0;i<32;i++){
            count += number >> i & 1;
        }
        printf("有%d个",count);
    }

    (x & -x) 
    int main(){
        int num;
        int count = 0;
        while(num){
            count++;
            num = num - (number & (-num));
            //每一次都取在最后一位的1然后扣掉再取下一个
            //eg: 10--> 0000 1010 
                        &
                 -10--> 1111 0110
                 result:     0010    (8)
                 (拿掉八)
        }
    }

    赋值操作符 = (有方向性)
    左边变量 = 右边表达式
    *赋值操作符可以连续使用(可读性比较差)
    
    复合赋值运算符

    *解引用操作符

    &取地址操作符

    将11的第三位变成1 
    int a = 11;
    int b = 1 << 2;
    a= a | b;

    三目运算符(?:)的运算顺序是从右往左

    逗号表达式 , :整个表达式的最后一个才是真正的值,
    但是都好表达式中括号内的所有运算会进行计算

    结构体
    自定义的数据类型,复杂数据类型
    eg
    int main(){
        char name[] = "apple";
        char address[] = "shaanxi";
        double price = 12.3;
    }
    表示方法;(定义一个结构体)
    struct Fruit() {
        char name[10];
        char address[10];
        double price[10];
    };(一定注意这里有个分号)

    int main() {
        struct Fruit apple = {"apple","shaanxi",12.5};
        struct Fruit apple = {"li","shanxi",12.5};
    }

    //访问apple的名称、产地、价格使用.操作符
    printf("%s,%s,%lf",apple.name,apple.address,apple.price);
    
    struct Fruit *p=&apple;
    printf("%s,%s,%lf\n",p->name,p->address,p->price);

    回文数
    int shidmao(){
        char str[] = "hello";
        //先计算长度
        int length = sizeof(str)/sizeof(char);
        //声明两个索引,一个指示左边,一个指示右边
        int l = 0;
        int r = length - 1 - 1;
        while(l < r){
            if(str[l] != str[r]){
                return 0;
            }
            else{
                l++;
                r--;
            }
        }
    }

    将数字转换成字符串sprintf()
    char butter[10];
    int n = 10;
    sprintf(buffer ,"%d",n);//"10"

    判断丑数
    int arr[] = {2,3,5};//质因子
    int length = 3;

    int ugly(){
        //0的情况
        if(num == 0){
            return 0;
        }
        if(num == 1){
            return 1;
        }
        for(int i=0;i<length-1;i++){
            if(num % arr[i] = 0){
                return ugly(num / arr[i]);
            }
        }
        return 0;
    }

    表达式求值
    int a = 10;
    if(-1>sizeof(a)){
        printf("hh");
    }
    else{
        printf("ww");
    }
    result hh;
    解释:求变量或类型在内存所占的字节大小,返回结果为size_t,unsigned int
          将有符号类型转换为无符号类型
          11111111 11111111 11111111 11111111
          隐式数据类型的转换
    C的整形算术运算总是以至少缺省整型类型的京都来进行的,为了获得这个精度
    表达式式中的int和short会被转换成为普通的int类型来计算,这种转换被称为
    整型提升
    char a = 'a';
    short b = 240;
    char c = a + b; 转换成int来计算
    eg:
    char a = 3;//00000000 00000000 00000000 00000011
    char b = 127;//00000000 00000000 00000000 01111111
                 //00000000 00000000 00000000 10000010 截断为 10000010
    char c = a + b;//转换为整型int来对待
    printf("%d",c);//10000010--提升为int类型:11111111 11111111 11111111 100000010
    
    操作符的优先级,操作符的结合性,是否控制求值顺序
    二者如果优先级相同,则会先看结合性

    static:延长变量的使用周期

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值