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

进制转换

为什么要使用二、八进制、十六进制?因为现在的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;}注意:如果定义写在调用之前,函数声明可以省略函数调用:函数名(实参)返回值会放在调用时的位置,可以立即使用,也可以用变量记录下来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习笔记8-作业

作业1&#xff1a;实现一个函数&#xff0c;判断一个整数是否是素数&#xff0c;调用该函数来显示出100~10000之间的所有素数 #include<stdio.h> #include<stdbool.h> #include<math.h> bool is_sushu(int num) {for(int i2;i<sqrt(num);i){if(num%i0)re…

学习笔记9-C语言-传参、类型限定符、递归

函数传参&#xff1a; 1、形参变量属于它所在的函数&#xff0c;出了该函数就不能使用 2、实参与形参之间都是以赋值的形式进行数据传递&#xff08;值传递&#xff09; 3、return 其实是把返回值数据放置到一个公共的区域&#xff08;函数和函数调用者&#xff09;&#xff0…

Oracle创建视图实现获取当前数据所在的页数,这里以每页2条数据分页

摘要&#xff1a;Oracle创建视图实现获取当前数据所在的页数&#xff0c;这里以每页2条数据分页&#xff0c;详细请看&#xff1a; 一&#xff1a; DROP VIEW MIP.TB_CMS_FLGTINFO_D_VIEW;/* Formatted on 2014/12/4 8:35:36 (QP5 v5.115.810.9015) */ CREATE OR REPLACE FOR…

学习笔记10-C语言-小项目-五子棋

小项目&#xff1a; 需要的数据 1、定义棋盘的二维数组 2、定义变量用于记录下棋的坐标 3、定义角色 黑棋 O 白棋 * 空位业务逻辑&#xff1a; 是否需要对数据初始化 for(;;) {1、清屏、显示棋盘2、落子坐标是否合法、该位置是否有棋子3、判断是否五子连珠4、交换角色5、显示…

学习笔记11-C语言-指针

什么是指针&#xff1a; 指针是一种特护的数据类型&#xff0c;使用它可以定义指针变量&#xff0c;指针变量存储的是整型数据&#xff0c;代表内存的编号&#xff0c;通过这个编号可以访问到对应内存。为什么使用指针 1、函数与函数之间是相互独立的&#xff0c;但是有些时候…

学习笔记12-C语言-堆内存、字符串

什么是堆内存&#xff1a; 是进程中的一个内存段&#xff08;text\data\bss\heap\stack&#xff09;&#xff0c;由程序猿手动控制。 特点是足够大&#xff0c;缺点是使用麻烦为什么要使用堆内存&#xff1a; 1、随着程序的复杂&#xff0c;数据会越来越多。 2、其他的内存段…

学习笔记13-C语言-字符串函数、缓冲区

字符串的常用函数: #include<string.h> size_t strlen(const char* s); 功能&#xff1a;计算字符串长度&#xff0c;但是结果不包括\0 返回值&#xff1a;返回字符串中字符的个数size_t str_len(const char* str) {assert(NULL ! str);const char* tmp str;while(*tmp…

Oracle数据库里面查询字符串类型的字段不为空和为空的SQL语句:

摘要&#xff1a;近期项目中&#xff0c;在做高级查询的时候有个条件是根据选择的字段&#xff0c;然后再选择字段的值为空和不为空做查询&#xff0c;在写SQL语句的时候费了很长时间&#xff0c;现在记录一下&#xff0c;方便日后查看&#xff1a; 一&#xff1a;查询字符串类…

学习笔记14-C语言-小项目-通讯录

通讯录&#xff1a; 要求&#xff1a; 姓名&#xff0c;性别、电话&#xff0c;最多储存50个联系人 功能&#xff1a;1、添加联系人2、按名字删除联系人3、按姓名修改联系人信息4、查找联系人&#xff0c;可通过电话&#xff0c;名字查找&#xff0c;支持模糊查找5、显示所有联…

学习笔记15-C语言-预处理指令、条件编译、头文件

预处理指令&#xff1a; 程序猿编写的代码不是标准C代码&#xff0c;并不能被真正的编译器索编译&#xff0c;需要一段程序把代码翻译一下。 翻译的过程叫做预处理&#xff0c;被翻译的代码叫做预处理指令&#xff0c;以#开头的都是预处理指令查看预处理的过程&#xff1a;gcc…

学习笔记16-C语言-小项目-使用Makefile完成2048

Makefile: Makefile是一系列编译指令组成的可执行文本&#xff0c;也叫做编译脚本。 在终端执行make命令会自动执行Makefile脚本中的编译命令&#xff0c; 而且它还可以根据文件的最后修改时间来判断哪些文件是否需要重新编译、哪些文件不需要重新编译&#xff0c;从而大大提高…

学习笔记17-C语言-结构、联合、枚举

结构&#xff1a; struct 结构是由程序猿自己设计的一种数据类型&#xff0c;用于描述一个事务的各项数据&#xff0c;由若干个不同的基础数据类型组成。设计结构&#xff1a;struct 结构体名{类型 成员名&#xff1b;...}&#xff1b;定义结构体变量struct 结构体名 变量名&a…

Maven 3.0.5 安装和配置:

摘要&#xff1a;现在的Web项目越来越多的都用maven管理了&#xff0c;所以我也抽时间学习学习&#xff0c;为了赶上时代&#xff01; 一&#xff1a;首先到maven官网&#xff1a;http://maven.apache.org/&#xff0c;然后选择相应的版本下载&#xff0c;我这里下载的是maven…

学习笔记18-C语言-文件

文件的分类&#xff1a; 文本文件&#xff1a; 存储的是ASCII码值的二进制 二进制文件&#xff1a; 存储的是数据的补码文件IO&#xff1a; FILE *fopen(const char *path, const char *mode); 功能&#xff1a;打开或者创建文件 path&#xff1a;文件的路径 mode&#x…

使用INNER JOIN ON 多表关联查询,获取指定用户下指定权限的资源SQL:

摘要&#xff1a;最近在看一个开源框架&#xff0c;其中用户&#xff0c;角色&#xff0c;资源&#xff0c;这块我感觉比较重要&#xff0c;所以就自己也模仿着写了下&#xff0c;其中在获取指定用户下的权限资源的时候遇到问题了&#xff0c;开始时&#xff0c;我首先想到的方…

Maven学习记录之maven基本操作命令,maven本地工厂的创建,maven骨架的生成,以及在eclipse中创建maven工程:...

摘要&#xff1a;今天又学习了一下maven&#xff0c;之前是下载并安装和配置好了maven的环境&#xff0c;今天主要学习的内容包括&#xff1a;maven本地工厂的创建&#xff0c;maven骨架的生成命令&#xff0c;maven在dos下创建maven工程&#xff0c;以及在eclipse中创建mavne工…

Oracle中通过游标执行带参数的存储过程实现解析CLOB字段内的xml字符串:

摘要&#xff1a;近来之前的项目数据出现了问题&#xff0c;原因是由于之前在设计数据库的时候把时间字段设置成了字符串格式&#xff0c;所以给后期的数据操作带来了很大的麻烦&#xff0c;这里提醒一下各位程序猿&#xff0c;以后在开发项目的时候时间字段一定要是时间字段&a…

Eclipse中使用Checkstyle,checkstyle插件检查java代码的自定义配置文件:

摘要&#xff1a;近来项目组在搞代码检查&#xff0c;所以领导让把checkstyle这个插件搞明白&#xff0c;现在我把我们写的自定义的checkstyle.xml文件记录一下&#xff0c;以便大家可以一起使用&#xff1a; 一&#xff1a;要使用checkstyle插件在eclipse中检查java代码&…

Linux 下安装 jdk-7u75-linux-x64.gz,jdk1.7.0_75,jdk1.7步骤:

摘要&#xff1a;近来又用到了Linux系统&#xff0c;所以就又新装了一个虚拟机和CentOS 6.4来用&#xff0c;搞开发的程序猿们可能都知道&#xff0c;在现在的很多企业中&#xff0c;生产环境大多都是Linux服务器&#xff0c;并且用的比较多的大都是CentOS&#xff0c;Red hat系…

Win7+VMware10.0+CentOS 6.4+Tomcat,Win7访问不了CentOS6.4上的Tomcat

摘要&#xff1a;今天在linux下安装Tomcat后&#xff0c;在虚拟机本地通过:http://localhost:8080/可以访问安装好的Tomcat服务器&#xff0c;但是在本机就不能访问&#xff0c;前提是在本机下可以ping的通虚拟机的IP地址的&#xff0c;最后经过Google&#xff0c;发现说可能是…