【学习ios之路:C语言】进制.位运算.栈

来源:互联网 发布:红梅白雪知 伴奏 编辑:程序博客网 时间:2024/05/21 11:04

1.进制转换

1).10进制转为N进制.方法:(连除倒取余).

2).N进制转换为10进制.方法:(按权求和法):当前位上的数乘以基数的位数减1次方.

例:

0b1111 ---- 1* 2^3 + 1*2^2 +1 * 2^1 +1*2^0 = 15;

038 ----- 3*16^1 +8*16^0 = 56;

3).N进制转换N进制.

例如: 二进制 --- 16进制

      1010   0011  ----  A 3  

       1111   0011  ----  F 3 

           int a = 010;//8进制    int b = 0x10;//16进制    printf("%d\n", a);    printf("%d\n", b);        /**     如何输出进制数:      %d  ------  十进制      %0x ------ 十六进制      %o  ----  八进制     */    

 2.位运算符


            //按位与    &    int a = 5 & 7;//5 101 7 111 同为1,则为1.否则为0  .,常用来给某一位做清零操作.    printf("%d\n", a);//101        //按位或    |    int b = 5 | 7;// 101 111 同为0,则为0,否则为1.,,常用来保留某一位状态.    printf("%d\n", b);//111         //按位异或  ^    int c = 5 ^ 7;    printf("%d\n",c);//101  111  010 ,相同为0,不同为1        //按位非    ~    char d =  ~ 7;//每一位都做取反操作.    printf("%d\n", d); //7 111  -1000 -8            //负数补码运算: 绝对值取反 加1  符号位 1 相当于 -  0 相当于 +    //如果是一个有符号的数,则二进制最高位代表符号位,1 代表负数,0代表正数.    //数据在内存中存储时是以补码的形式存储,正数的补码是正数本身,负数的补码是绝对值取反加一.    //一个字节代表八位二进制数.    /**     *  数据类型的取值范围:     *  无符号:     *  char 0 ~ 2^8 - 1  //0 - 255     *  short 0 ~ 2^16 -1     *  int 0 ~ 2^32 - 1     *  有符号:     *  char 11111111有符号,最高位是符号位, - 2^7 ~2^7 - 1  -128 - 127(正数包括0,即128)     *  short - 2^15 ~ 2^15 - 1     *  int - 2^31 ~ 2^31 - 1     */        char f = 255;//11111111 绝对值01111111 取反 100000000 加1 100000001 即 -1,负数是按照补码存储的    printf("%d\n", f);//-1       unsigned char e = 255;    printf("%d\n",e);//超出范围溢出,即为0    //左移     <<    unsigned char g = 1;    printf("%d\n",g << 3);//乘以2的3次方  // 8    //右移     >>    printf("%d\n",255 >> 2);//除于2的2次方  //63
例题:

1.将100高四位与第四位互换.100: 0110 0100

        unsigned char number = 0b01100100;        //1.左移动四位    unsigned char left = number << 4;//01000000       //2.右移动四位    unsigned char right = number >> 4;//00000110    //3.按位或        unsigned char result = left | right;//01000110    printf("%d\n", result);//70

2.将10010010 奇偶位互换

        unsigned char num = 0b10010010;//146    //1.向左移动一位,得到奇数位    unsigned char left1 = num << 1; //00100100 ,因为是char型,当向左移动,值=146*2溢出.但换位int型就ok了.char类型范围,-128 - 127    printf("左移:num = %d,left1 = %d\n", num, left1);       //2.保留偶数为,将奇数位清零.  00100000    unsigned char l = left1 & 0b10101010;//奇数位清0,即奇数位为0.&同为1即为1         //3.向右移动一位得到     unsigned char right1 = num >> 1;//01001001     //printf("右移:num = %d,right1 = %d\n", num, right1);         //4.保留奇数位,讲偶数位清零. 01000001     unsigned char r = right1 & 0b01010101;        //5.按位或    unsigned char s = r | l;    printf("%d\n", s);     

2.两个数交换,不使用第三个变量(企业级做法)

        int m = 10, n = 5;    m = m ^ n;    n = m ^ n;    m = m ^ n;    printf("%d %d\n", m, n);    

4.栈内存分配原则

            <span style="color:#000000;">/**     * 栈区内存分配原则     * 原则: 从高到低分配,从低到高存取.     * 地址: 内存单元的一个编号     */    //数组名代表数组的首地址,也就是数组中第一个元素的地址.是一个常量地址.    int m1[5] = {1, 2, 3, 4, 5};    printf("%p\n", m1);    //0x7fff5fbff7f0结果    printf("%p\n", &m1[0]);//0x7fff5fbff7f0    printf("%p\n", &m1[1]);//0x7fff5fbff7f4    printf("%p\n", &m1[2]);//0x7fff5fbff7f8    printf("%p\n", &m1[3]);//0x7fff5fbff7fc    printf("%p\n", &m1[4]);//0x7fff5fbff800 //存取,从高到低存取    printf("-------------------------\n");        int x = 5;    int y = 10;    printf("%p\n",&x);//0x7fff5fbff7b8    printf("%p\n",&y);//0x7fff5fbff7b4,可看出从高到底分配空间            int s1 = - 5;// 1000  0000 0000 0000 0000 0000 0000 0101 按照补码存储,绝对值取反加一    printf("%d\n", s1);//1111 1111 1111 1111 1111 1111 1111 1011 FF FF FF FB //断点 </span>


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 网易将军令绑定银行卡锁定了怎么办 网易新闻上的视频没有声音怎么办 把登录窗体的宏删掉了怎么办 电脑死机了怎么办也不能关机了 虎牙直播手游无法和队友开麦怎么办 为成年开无手续麽托出车祸怎么办 支付宝商户未签约或合约过期怎么办 我的手机帐号被锁定了怎么办 点错网页下载收发收费信息怎么办 用邮箱注册的微信忘记密码了怎么办 很久不用的邮箱号忘记密码怎么办 陕西省志愿云忘记密码和邮箱怎么办 国寿易学堂忘记登录密码怎么办 百度云下载显示本地空间不足怎么办 百度云离线内容违规无法下载怎么办 百度云压缩包要压解密码没有怎么办 用2016酷我音乐制作铃音怎么办 邮箱跟手机号一同绑定支付宝怎么办 网易邮箱取消账户关联没反应怎么办 剑三重置版客户端修复不成功怎么办 网易闪电邮的邮件满了怎么办 忘了手机的账号和密码怎么办 手机绑定的扣扣达到十个上限怎么办 邮箱发送邮件到上限无法发送怎么办 路由器重置后不知道账号密码怎么办 发出的邮件别人看了撤回不了怎么办 域名和邮箱是不同的公司怎么办 qq音乐听过的歌单找不到了怎么办 快手开直播前置摄像头太暗怎么办 小米手机帐号绑定无法侠用怎么办 用交易猫买完游戏账号被骗了怎么办 一个华为账号有两个游戏账号怎么办 加密u盘电脑上打开空怎么办 国网加密u盘电脑打开为空怎么办 足球竞彩软件下架后里面的钱怎么办 竞彩足球提现不到账怎么办 竞彩足球投注后输了怎么办 英雄联盟鼠标箭头右键点不了怎么办 上古卷轴5数值修改错了怎么办 小时候打针把屁股脂肪打扁了怎么办 大繁盛满腹市场2对话时闪退怎么办