一、C语言整数:int(integer)
signed:有符号的,可以表示正数和负数。
unsigned:无符号的,只能表示正数
short:短的,现在主流的64位操作系统下,整数占用内存4个字节>,使用 4 个字节保存较小的整数绰绰有余,会空闲出两个字节来,这些字节就白白浪费掉了
long:长的,更长的整数。
整数的取值范围:通过占用的内存推断。一个字节有8个位,表示>的数据的取值范围是2^8-1,即255.如果占用的内存是两个字节,无符号型取值范围是2^8ⅹ2^8-1。如果是有符号,取值范围减半,因为符号一个位。
二进制数、八进制数和十六进制数的书写:表示一个二进制、八进>制或者十六进制数字就不一样了,为了和十进制数字区分开来,必须采用某种特殊的写法,具体来说,就是在数字前面加上特定的字符,也就是加前缀。
二进制
二进制由 0 和 1 两个数字组成,书写时必须以0b或0B(不区分大小写)开头。
并不是所有的编辑器都支持二进制数字,只有一部分编辑器支持,并且跟编译器的版本有关系。
如:Notepad++ TextMate 这些编辑器可能会将二进制文件中的非文本字符解释为特殊字符,从而导致文件内容损坏。
八进制
八进制由 0~7 八个数字组成,书写时必须以0开头(注意是数字 0,不是字母 o)
十六进制
十六进制由数字 0~9、字母 A~F 或 a~f(不区分大小写)组成,书写
时必须以0x或0X(不区分大小写)开头。
整数的输出:
%hd、%d、%ld 以十进制、有符号的形式输出short、int、long 类
型的整数。
%hu、%u、%lu 以十进制、无符号的形式输出short、int、long 类
型的整数。
下面介绍几个C语言库函数(个人觉得需要掌握):
int atoi(const char *nptr); // 把字符串nptr转换为int整数
long atol(const char *nptr); // 把字符串nptr转换为long整数
int abs(const int j); // 求int整数的绝对值
long labs(const long int j); // 求long整数的绝对值
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char an[12];
memset(an,0,sizeof(an));
strcpy(an,"1234");//不要将字符长度超过12,会变为字符>数组,而不是字符串,也不要输入空字符,字符串只会读取到空字符>之前。
int aa;
aa=atoi(an);
printf("整数为%d\n",aa);
long int ab=atol(an);
printf("长整数为%ld\n",ab);
int ac=-11;
printf("整数ac绝对值为%d\n",abs(ac));
long int ad=-11111111111111111;
printf("长整数为%ld\n",labs(ad));
return 0;
}
注意:atoi()和stol()函数无法将字母或字符字符串转换为整数或长整数,返回值会为0。如果要将字符串转换为整数或长整数,需要在字符串中包含数字字符。(我第一次测试字符串用的ikun,输出结果为0).
二、数据类型的别名:使用 typedef 关键字来给数据类型定义一个别名
,别名一般有两个特点:1)名称更短;2)更符合程序员的习惯。(后期写数据结构代码前详细解决)
三、随机数:
在C语言中,我们使用 <stdlib.h> 头文件中的 srand和rand 函数来生成随机数。
void srand(unsigned int seed); // 随机数生成器的初始化函数
int rand(); // 获取一个随机数
srand函数初始化随机数发生器(俗称种子),在实际开发中,我们
可以用时间作为参数,只要每次播种的时间不同,那么生成的种子就不同,最终的随机数也就不同,通常我们采用 <time.h> 头文件中的 time 函数即可得到一个精确到秒的时间作为种子。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//C语言中的`sleep`函数需要包含头文件`<unistd.h>`。
#include <unistd.h>
int main()
{
int ii;
srand(time(0)); // 播下随机种子
//没有srand也会生成随机数。在使用rand函数生成随机数时,实际上
是利用一个伪随机数生成器,该生成器的初始种子是固定的。如果不>改变种子,那么每次运行程序时,生成的随机数序列都是一样的。因>此,为了得到不同的随机数序列,需要在程序中用srand函数播下不同
的随机种子。srand函数需要传入一个整数值作为种子,该整数值可以
是时间、进程ID等唯一的值,以保证每次播下的种子都不同。这样,>每次生成的随机数序列都是不同的。
// for (ii=0;ii<5;ii++) // 生成5个随机数
while(true)
{
printf("%d\n ", rand()); // 获取随机数
sleep(5);
}
}
生成一定范围随机数
在实际开发中,需求往往是一定范围内的随机数,对于产生一定范围的随机数,就需要使用一定的技巧,常用的方法是取模运算(取余数),再做一个加法运算:
int a = rand() % 50; // 产生0~49的随机数
如果要规定上下限:
int a = rand() % 51 + 100; // 产生100~150的随机数。
如果有错误或者值得改进的地方,可以直接讨论,我会持续改进。学习的例子和知识都来自B站码道论坛.