整形详解

包含头文件

#include <stdio.h>
#include <stdlib.h> 
#include <time.h> 

类型别名和整数类型声明

使用 typedef 创建类型别名,并声明不同类型的整数变量。

    //类型别名
    typedef unsigned int uint; 
    //短整形,两个字节 
    short int a = 1;
    short a2 = 1;
    //无符号段整形 
    unsigned short int a3 = 1;
    //整形,四个字节 
    int b = 1;
    //无符号整形
    unsigned int b1 = 1;
    //使用类型别名
    uint b2 = 1; 
    //有符号整形,默认就是有符号的
    signed int b3 = 1;  
    //长整形,八个字节 
    long int c = 1;
    long c1 = 1;

整数的格式化输出

使用 printf 函数以不同的格式输出整数。

    //整形的各种输出格式控制,h->short,d->decimal 
    //十进制格式 
    printf("有符号十进制,短整形:%hd,整形:%d,长整形:%ld\n",-10,-10,-10);
    printf("无符号十进制,短整形:%hu,整形:%u,长整形:%lu\n\n",10,10,10); 
    //二进制格式
    printf("无符号不带前缀二进制,短整形:%hb,整形:%b,长整形:%lb\n",-2,-2,-2);
    printf("无符号二进制,短整形:%hub,整形:%ub,长整形:%lub\n\n",2,2,2);
    //八进制格式
    printf("无符号不带前缀八进制,短整形:%ho,整形:%o,长整形:%lo\n",8,8,8);
    printf("无符号带小写前缀八进制,短整形:%#ho,整形:%#o,长整形:%#lo\n\n",8,8,8);
    //十六进制
    printf("无符号不带前缀小写十六进制,短整形:%hx,整形:%x,长整形:%lx\n",16,16,16);
    printf("无符号不带前缀大写十六进制,短整形:%hX,整形:%X,长整形:%lX\n",16,16,16);
    
    printf("无符号带前缀小写十六进制,短整形:%#hx,整形:%#x,长整形:%#lx\n",16,16,16); 
    printf("无符号带前缀大写十六进制,短整形:%#hX,整形:%#X,长整形:%#lX\n\n",16,16,16);

整数库函数的使用

使用标准库函数进行字符串转换和绝对值计算。

    //整形常用的库函数
    //字符串转int 
    int val1 = atoi("-1000"); 
    //字符串转long 
    long val2 = atol("-100000000"); 
    //求int的绝对值
    int abs1 = abs(val1);
    //求long的绝对值
    long abs2 = labs(val2); 
    printf("字符串转int的值:%d,字符串转long的值:%ld,int的绝对值:%d,long的绝对值:%ld\n",val1,val2,abs1,abs2); 

随机数生成

使用 time 函数获取当前时间作为随机数种子,并生成随机数。

    //获取当前时间作为随机数种子
    long seed = time(0); 
    //随机数生成器的初始化函数,
    srand(seed); 
    //获取一个随机数 
    int rand_val = rand();
    printf("获取的随机数是:%d\n",rand_val); 
    printf("获取的随机数是:%d\n",rand()	); 
    //获取一定范围内的随机数
    //0-50
    rand_val = rand() % 50;
    printf("随机生成的[0,50]的随机数:%d\n",rand_val);
    //100-150 
    rand_val = rand() % 50 + 100;
    printf("随机生成的[100,150]的随机数:%d\n",rand_val);

函数原型

  • int atoi(const char *str);:将字符串转换为 int
  • long atol(const char *str);:将字符串转换为 long
  • int abs(int j);:返回 int 的绝对值。
  • long labs(long j);:返回 long 的绝对值。
  • void srand(unsigned int seed);:设置随机数种子。
  • int rand(void);:生成一个随机数。
  • time_t time(time_t *timer);:返回当前时间。

完整实例代码

#include <stdio.h>
#include <stdlib.h> 
#include <time.h> 

int main(){
    //类型别名
    typedef unsigned int uint; 
    //短整形,两个字节 
    short int a = 1;
    short a2 = 1;
    //无符号段整形 
    unsigned short int a3 = 1;
    //整形,四个字节 
    int b = 1;
    //无符号整形
    unsigned int b1 = 1;
    //使用类型别名
    uint b2 = 1; 
    //有符号整形,默认就是有符号的
    signed int b3 = 1;  
    //长整形,八个字节 
    long int c = 1;
    long c1 = 1;
    
    //整形的各种输出格式控制,h->short,d->decimal 
    //十进制格式 
    printf("有符号十进制,短整形:%hd,整形:%d,长整形:%ld\n",-10,-10,-10);
    printf("无符号十进制,短整形:%hu,整形:%u,长整形:%lu\n\n",10,10,10); 
    //二进制格式
    printf("无符号不带前缀二进制,短整形:%hb,整形:%b,长整形:%lb\n",-2,-2,-2);
    printf("无符号二进制,短整形:%hub,整形:%ub,长整形:%lub\n\n",2,2,2);
    //八进制格式
    printf("无符号不带前缀八进制,短整形:%ho,整形:%o,长整形:%lo\n",8,8,8);
    printf("无符号带小写前缀八进制,短整形:%#ho,整形:%#o,长整形:%#lo\n\n",8,8,8);
    //十六进制
    printf("无符号不带前缀小写十六进制,短整形:%hx,整形:%x,长整形:%lx\n",16,16,16);
    printf("无符号不带前缀大写十六进制,短整形:%hX,整形:%X,长整形:%lX\n",16,16,16);
    
    printf("无符号带前缀小写十六进制,短整形:%#hx,整形:%#x,长整形:%#lx\n",16,16,16); 
    printf("无符号带前缀大写十六进制,短整形:%#hX,整形:%#X,长整形:%#lX\n\n",16,16,16);
    
    //整形常用的库函数
    //字符串转int 
    int val1 = atoi("-1000"); 
    //字符串转long 
    long val2 = atol("-100000000"); 
    //求int的绝对值
    int abs1 = abs(val1);
    //求long的绝对值
    long abs2 = labs(val2); 
    printf("字符串转int的值:%d,字符串转long的值:%ld,int的绝对值:%d,long的绝对值:%ld\n",val1,val2,abs1,abs2); 
    
    //获取当前时间作为随机数种子
    long seed = time(0); 
    //随机数生成器的初始化函数,
    srand(seed); 
    //获取一个随机数 
    int rand_val = rand();
    printf("获取的随机数是:%d\n",rand_val); 
    printf("获取的随机数是:%d\n",rand()); 
    //获取一定范围内的随机数
    //0-50
    rand_val = rand() % 50;
    printf("随机生成的[0,50]的随机数:%d\n",rand_val);
    //100-150 
    rand_val = rand() % 50 + 100;
    printf("随机生成的[100,150]的随机数:%d\n",rand_val);
    return 0;
}