进制转换

为什么要使用二、八进制、十六进制?因为现在的CPU只能识别高低两种电流,因此只能对二进制数据进行运算二进制数据虽然可以直接被cpu识别,但不方便人们书写、记录,所以把二进制数据转换成八进制是为了方便记录在文件中。随着cpu的不断发展,位数不断增加,由早期的8位逐渐发展成了现在的64位,因此八进制逐渐不能满足需求,所以发展出了十六进制,由于历史原因,八进制还不能退出历史舞台(文件权限:rwx=4+2+1)十进制转换二进制:求余法: 用2对数据进行求余,然后对商继续求余,直到商为0结束,过程中产生的余数就是该数据的二进制(逆序)n%2 = 0|1商%2 = 0|1直到商为零求权法:从高位到低位,用数据-2^(n-1),如果可以减,那么第n位的二进制数就是1,否则0练习1:输入一个正整数显示该数据的n(n>=2)进制,超出10的数用字母显示
#include<stdio.h>int main(int argc,const char* argv[])
{int num,n;printf("输入数和进制");scanf("%d%d",&num,&n);int cnt=0;char a[32]={};while(num){a[cnt++]=num%n;   num /= n;}for(int i=cnt-1;i>=0;i--){if(a[i]>9){printf("%c",'A'+a[i]-10);}else{printf("%hhd",a[i]);  }}
}
二进制转十进制:(其他进制转10进制也适用)第n位数据*2^(n-1),然后求和,得到的数据就是该数的十进制注意:二进制转换成八进制或十六进制只是为了更方便的记录二进制数据二进制转八进制: 三位二进制位对应一个八进制位二进制 : 1 011 011 010 010 110八进制 :1  3   3   2   2   6二进制转十六进制: 四位二进制位对应一个十六进制位二进制: 1011 0110 1001 0110十六进制:B    6    9    6  在C代码中:以0开头的数据都是八进制,以0x开头的都是16进制数据。%o 以八进制显示数据%x 以十六进制显示数据%#o、%#x 以对应的进制显示数据,并加上开头前缀显示

原码、反码、补码

原码: 数据的二进制就是原码
反码:正数反码就是原码负数的反码是它的原码除符号位外,其余位按位取反
补码:正数的补码就是它的原码负数的补码:1、转换二进制原码2、原码符号位不变,按位求反得反码3、反码+1得补码补码转数据:无符号补码直接转换成十进制有符号的补码:最高位0:是正数,直接转10进制最高位1:是负数1、补码-1 得反码2、反码符号位不变,其余各位按位取反3、原码转成10进制

位运算符: & | ~ ^ >> <<

A & B 按位相与
01101101  0x6D
10011110  0x9E
--------------
00001100  0x0CA | B 按位相或
01101101  0x6D
10011110  0x9E
--------------
11111111  0xFF~A  按位求反
01101101  0x6D
--------------
10010010  0x92A ^ B 按位异或:不同出1,相同出0
01101101  0x6D
10011110  0x9E
--------------
11110011  0xF3A << n 按位左移:把A的补码向左移动n位,左边丢弃,右边补零
01101101 << 4  0x6D
--------------
11010000  0xD0A >> n 按位右移:把A的补码向右移动n位,右边丢弃,左边补符号位
01101101 >> 4  0x6D
--------------
00000110  0x06练习2:输入一个整数,把它的4~7位设置为1010,其他位不变(n & ~(0xf << 4)) | (0xA << 4)
#include<stdio.h>
#include<stdint.h>
int main(int argc,const char* argv[])
{uint32_t num=0;scanf("%u",&num);num = (num & ~(0xf <<4))|(0xA<<4);printf("%u\n",num);
}
练习3:输入俩整数,把A的4~7位设置为B的3~6位
#include<stdio.h>
#include<stdint.h>
int main(int argc,const char* argv[])
{uint32_t a=0,b=0;scanf("%u%u",&a,&b);a = a & ~(0xf0) | (b<<1 & 0xf0);printf("%u",a);
}

函数:function 方法

一段具有某项功能的代码的集合,是C语言中管理代码的最小单位
把代码封装成一个个函数,是为了方便管理和调用代码。函数的分类:标准库函数:C语言标准委员会为C语言以函数形式提供的一些基础的功能,被封装在libc.so中,使用时需要包含头文件,只需要写 函数名(参数) 调用即可。<ctype.h>int isalnum(int c);功能:当c为数字、字母时返回真int isalpha(int c);功能:当c为字母时返回真int isdigit(int c);功能:当c为数字时返回真int islower(int c);功能:当c为小写字母时为真int isupper(int c);功能:当c为大写字母时为真以下函数都是libm.so 中:sqrtpowdouble floor( double arg );功能:返回小于等于arg的最大整数double ceil( double num );功能:返回大于等于num的最小整数double fabs( double arg );功能:返回arg的绝对值#include <time.h>time_t time(time_t *time);#include <stdlib.h>  int system(const char *command);#include <stdlib.h>  void srand(unsigned seed);功能:种随机种子int rand(void);功能:获取一个随机数练习4:获取10个范围是[100,1001)的随机数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(int argc,const char* argv[])
{srand(time(NULL));int num[10]={};for(int i=0;i<10;i++){num[i]=rand()%901+100;printf("%d ",num[i]);}
}
        练习5:随机出一组双色球中奖号码:6个红球 1-33不重复1个蓝球 1-16
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(int argc,const char* argv[])
{srand(time(NULL));int red[6]={};int i=0,j=0;while(i<6){int k=0;red[i]=rand()%33+1;for(j=0;j<i;j++){if(red[i]==red[j]){k++;break;}}if(k==0)i++;}int blue=rand()%16+1;for(i=0;i<6;i++){printf("%d ",red[i]);    }printf("\n%d",blue);}
    系统函数:(不是函数)是操作系统以函数接口形式提供的一些功能,这些功能包括:内存管理、信号处理、文件IO、文件管理、进程管理、进程通信、线程管理、线程同步、网络通信第三方库函数:glog  日志记录md5   验证JSON  序列化和反序列化自定义函数:为了更好的管理代码、减少冗余把代码封装成函数形式注意:一个函数尽量不超过50行(软规定)一个函数负责一个功能(硬性规定)函数声明:函数声明的目的是为了告诉其他代码函数的调用形式返回值类型 函数名(类型1 变量1,类型2 变量2,... )1、C语言中函数名一般全部小写,用下划线分隔2、如果不需要参数建议写void,不要空着3、如果不需要返回值建议写void隐式声明:当调用函数时没有定义,就会产生隐式声明,编译器猜测函数的格式,返回值会猜测成int类型,参数列表会根据调用时提供的参数来猜测函数定义:返回值类型 函数名(类型1 变量1,类型2 变量2,... ){函数体;return val;}注意:如果定义写在调用之前,函数声明可以省略函数调用:函数名(实参)返回值会放在调用时的位置,可以立即使用,也可以用变量记录下来。

学习笔记7-C语言-进制转换、原返补、位运算、函数相关推荐

  1. 嵌入式系统设计师学习笔记①:数的进制转换

    嵌入式系统设计师学习笔记:数的转换 进位计数制系统的基本概念:数制,基数,数码,数位,位权 制作了个表格如下: 在十六进制中:A-10,B-11,C-12,D-13,E-14,F-15. 举例各种进制 ...

  2. JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算

    JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都 ...

  3. JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算...

    JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都 ...

  4. c语言进制转换pdf下载,C语言实现任意进制转换.doc

    C语言实现任意进制转换.doc includestdio.h#includemath.h#includestring.hvoid dtox(double num,int jz)char xnum100 ...

  5. c语言进制转换实验报告,c语言_各种进制转换.docx

    c语言_各种进制转换.docx c 语言 各种进制转换 计算机中常用的数的进制主要有二进制.八进制.十六进制. 2 进制,用两个阿拉伯数字0.1: 8 进制,用八个阿拉伯数字0.1.2.3.4.5.6 ...

  6. (笔记)labview各种进制转换(通讯得到的负数补码转换成负数原码)

    起因: 我是因为传感器手持显示器读到负的值,传感器说明书说通讯回馈负值是以补码形式,因此开始研究如何显示. 前情提要: modbus 485得到的是16进制 (右键选择16进制,否则是乱码) 已知原码 ...

  7. java进制转化_【Java学习笔记之四】java进制转化

    十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinar ...

  8. 【Java学习笔记之四】java进制转化

    十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinar ...

  9. python的用算法进制转换详解_学习python第五天进制转换

    6.进制之间的转换(重要) 二进制:满二进一 范围:0.1符号:0b例如:0b10...[注意]计算机只能识别二进制数据 八进制:满八进一 范围:0~7符号:0o例如:0o66 十进制:满十进一 范围 ...

最新文章

  1. oracle10g总结
  2. 都在说微服务,那么微服务的反模式和陷阱是什么(二)
  3. php中$GLOBALS
  4. 高阶前端开发人员必备工具-Node.JS知识讲解
  5. Maven and Nexus2
  6. C++ 内存基本构件new [] /delete []的意义、内存泄漏原因、VC下cookie的基本布局
  7. centos关闭防火墙
  8. 洛谷入门题P1046、P1047、P1427、P1428、P2141、P1567题解(Java语言描述)
  9. @Profile注解与@Conditional注解
  10. 和项目组研究计算几何
  11. Oracle常用函数——COALESCE
  12. DATEUTIL计算时间进度
  13. 得空写的基于web的工作流表单设计器,大家看看怎么样
  14. Android 时光轴 -记录生活
  15. 关于打包处理less文件时遇见的问题:
  16. IDEA中如何将一个JavaWeb项目打包成war包
  17. Mac安装vim插件
  18. asp.net基于net的小美果蔬批发网-蔬菜商城系统-计算机毕业设计
  19. 【优化求解】基于蜘蛛猴算法求解单目标优化问题matlab代码
  20. ctf-web-文件包含2

热门文章

  1. java jdbc 登录_java web JDBC 判断用户登录问题!
  2. linux 自带 mysql,linux下安装mysql
  3. tidb vs mysql_一个长耗时SQL在TiDB和Mysql上的耗时测试
  4. QComboBox 样式设置
  5. opensips简介
  6. java构建内存池队列_内存池完整实现代码及一些思考
  7. 炸金花比牌规则java_陈陈来给你们炸金花的简易纸牌规则教学与心态指导
  8. mybatis plug 只查id_Mybatis一对多/多对多查询时只查出了一条数据
  9. C# 监控字段_监控交换机选择:千兆/百兆/核心/PoE/光纤交换机选型指南
  10. 2018高职计算机474分排名,2018年高职分类考试招生录取分数线出炉