函数声明:long labs(long n);函数声明:long long llabs(long long int n);函数功能:计算长整型数的绝对值。
C语言函数大全
本篇介绍C语言函数大全-- l 开头的函数
1. labs,llabs
1.1 函数说明
函数声明
函数功能
long labs(long n);
计算长整型的绝对值
long long int llabs(long long int n);
计算long long int 类型整数的绝对值
1.2 演示示例
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
long result;
long x = -12345678L;
result= labs(x);
printf("number: %ld , abs value: %ld\n", x, result);
long long resultL;
long long int xL = -1234567890123456789;
resultL = llabs(xL);
printf("The absolute value of %lld is %lld\n", xL, resultL);
return 0;
}
1.3 运行结果
2. ldexp,ldexpf,ldexpl
2.1 函数说明
函数声明
函数功能
double ldexp(double x, int exp);
计算 x 乘以 2 的指定次幂(double)
float ldexpf(float x, int exp);
计算 x 乘以 2 的指定次幂(float)
long double ldexpl(long double x, int exp);
计算 x 乘以 2 的指定次幂(long double)
2.2 演示示例
#include <stdio.h>
#include <math.h>
int main()
{
int n = 3;
double x = 3.5, result;
result = ldexp(x, n);
float xf = 3.5f, resultf;
resultf = ldexpf(xf, n);
long double xL = 3.5L, resultL;
resultL = ldexpl(xL, n);
printf("ldexp(%lf, %d) = %lf\n", x, n, result);
printf("ldexpf(%f, %d) = %f\n", xf, n, resultf);
printf("ldexpl(%Lf, %d) = %Lf\n", xL, n, resultL);
return 0;
}
ldiv_t ldiv(long int numer, long int denom);
计算两个 long int 类型整数的商和余数
lldiv_t lldiv(long long int numer, long long int denom);
计算两个 long long int 类型整数的商和余数
参数:
numer : 被除数
denom : 除数
ldiv 函数的返回值类型 ldiv_t 是一个结构体类型,定义如下:
typedef struct {
long int quot; // 商
long int rem; // 余数
} ldiv_t;
lldiv 函数的返回值类型 lldiv_t 是一个结构体类型,定义如下:
typedef struct {
long long int quot; // 商
long long int rem; // 余数
} lldiv_t;
3.2 演示示例
#include <stdio.h>
#include <stdlib.h>
int main()
{
long int numer = 1234567890;
long int denom = 987654321;
ldiv_t result;
result = ldiv(numer, denom);
printf("%ld / %ld = %ld, %ld %% %ld = %ld\n", numer, denom,
result.quot, numer, denom, result.rem);
long long int numerL = 1234567890123456789LL;
long long int denomL = 987654321LL;
lldiv_t resultL;
resultL = lldiv(numerL, denomL);
printf("%lld / %lld = %lld, %lld %% %lld = %lld\n", numerL, denomL,
resultL.quot, numerL, denomL, resultL.rem);
return 0;
}
注意: 如果 denom 参数为零,则 ldiv() 函数会产生一个异常情况。此外,如果两个参数中有一个或两个都是负数,则商和余数的计算规则将根据 C 标准进行调整。
#include <stdio.h>
#include <stdlib.h>
#include <search.h>
int compare(const void *a, const void *b)
{
return (*(int*)a - *(int*)b);
}
int main()
{
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
unsigned int * number = (unsigned int *)&n;
int key = 2;
int *result;
result = (int *)lfind(&key, arr, number, sizeof(int), compare);
if (result != NULL) {
printf("\n%d is found at index %lld\n", key, result - arr);
} else {
printf("\n%d is not found in the array\n", key);
}
return 0;
}
#include <stdio.h>
#include <math.h>
int main()
{
double x = 100.0;
double result = log10(x);
printf("The logarithm base 10 of %lf is %lf.\n", x, result);
return 0;
}
11.3 运行结果
12. longjmp
12.1 函数说明
函数声明
函数功能
void longjmp(jmp_buf env, int val);
跳转到指定的程序位置并恢复相应的上下文环境
unsigned long _lrotl(unsigned long value, int shift);
它是 Windows 系统特有的函数,用于将 32 位无符号整数按位循环左移。
参数:
value : 要进行循环左移的 32 位无符号整数
shift : 左移的位数
返回值:
左移后的结果。
14.2 演示示例
#include <stdlib.h>
#include <stdio.h>
int main()
{
unsigned long result;
unsigned long value = 2;
result = _lrotl(value, 2);
printf("The value %lu rotated left one bit is: %lu\n", value, result);
return 0;
}
注意: _lrotl() 函数是 Windows 系统特有的函数,在其他操作系统或编译器下可能不可用或使用方式有所不同。此外,由于该函数只适用于 32 位无符号整数,如果需要对 64 位整数进行位移操作,则需要使用其他函数。
char *ltoa(long value, char *str, int radix);
用于将长整型数值转换为字符串格式
参数:
value : 要转换的长整型数值
str : 保存转换结果的字符缓冲区指针
radix : 要转换的进制数(如2进制、 10 进制、16 进制等),取值范围为 2~36
返回值:
指向转换结果的指针(即 str 参数的值)
17.2 演示示例
#include <stdio.h>
#include <stdlib.h>
int main()
{
long value = 123456789L;
char str[20];
ltoa(value, str, 2);
printf("The result of converting %ld to binary string is: %s\n", value, str);
ltoa(value, str, 10);
printf("The result of converting %ld to decimal string is: %s\n", value, str);
ltoa(value, str, 16);
printf("The result of converting %ld to hexadecimal string is: %s\n", value, str);
return 0;
}
char *lltoa(long long value, char *str, int radix);
用于将长长整型数值转换为字符串格式
参数:
value : 要转换的长长整型数值
str : 保存转换结果的字符缓冲区指针
radix : 要转换的进制数(如 2进制、10 进制、16 进制等),取值范围为 2~36
返回值:
指向转换结果的指针(即 str 参数的值)
18.2 演示示例
#include <stdio.h>
#include <stdlib.h>
int main()
{
long long value = 123456789012345LL;
char str[20];
lltoa(value, str, 2);
printf("The result of converting %lld to binary string is: %s\n", value, str);
lltoa(value, str, 10);
printf("The result of converting %lld to decimal string is: %s\n", value, str);
lltoa(value, str, 16);
printf("The result of converting %lld to hexadecimal string is: %s\n", value, str);
return 0;
}
函数声明:long labs(long n);函数声明:long long llabs(long long int n);函数功能:计算长整型数的绝对值。
C语言函数大全
本篇介绍C语言函数大全-- l 开头的函数
1. labs,llabs
1.1 函数说明
函数声明
函数功能
long labs(long n);
计算长整型的绝对值
long long int llabs(long long int n);
计算long long int 类型整数的绝对值
1.2 演示示例
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
long result;
long x = -12345678L;
result= labs(x);
printf("number: %ld , abs value: %ld\n", x, result);
long long resultL;
long long int xL = -1234567890123456789;
resultL = llabs(xL);
printf("The absolute value of %lld is %lld\n", xL, resultL);
return 0;
}
1.3 运行结果
2. ldexp,ldexpf,ldexpl
2.1 函数说明
函数声明
函数功能
double ldexp(double x, int exp);
计算 x 乘以 2 的指定次幂(double)
float ldexpf(float x, int exp);
计算 x 乘以 2 的指定次幂(float)
long double ldexpl(long double x, int exp);
计算 x 乘以 2 的指定次幂(long double)
2.2 演示示例
#include <stdio.h>
#include <math.h>
int main()
{
int n = 3;
double x = 3.5, result;
result = ldexp(x, n);
float xf = 3.5f, resultf;
resultf = ldexpf(xf, n);
long double xL = 3.5L, resultL;
resultL = ldexpl(xL, n);
printf("ldexp(%lf, %d) = %lf\n", x, n, result);
printf("ldexpf(%f, %d) = %f\n", xf, n, resultf);
printf("ldexpl(%Lf, %d) = %Lf\n", xL, n, resultL);
return 0;
}
ldiv_t ldiv(long int numer, long int denom);
计算两个 long int 类型整数的商和余数
lldiv_t lldiv(long long int numer, long long int denom);
计算两个 long long int 类型整数的商和余数
参数:
numer : 被除数
denom : 除数
ldiv 函数的返回值类型 ldiv_t 是一个结构体类型,定义如下:
typedef struct {
long int quot; // 商
long int rem; // 余数
} ldiv_t;
lldiv 函数的返回值类型 lldiv_t 是一个结构体类型,定义如下:
typedef struct {
long long int quot; // 商
long long int rem; // 余数
} lldiv_t;
3.2 演示示例
#include <stdio.h>
#include <stdlib.h>
int main()
{
long int numer = 1234567890;
long int denom = 987654321;
ldiv_t result;
result = ldiv(numer, denom);
printf("%ld / %ld = %ld, %ld %% %ld = %ld\n", numer, denom,
result.quot, numer, denom, result.rem);
long long int numerL = 1234567890123456789LL;
long long int denomL = 987654321LL;
lldiv_t resultL;
resultL = lldiv(numerL, denomL);
printf("%lld / %lld = %lld, %lld %% %lld = %lld\n", numerL, denomL,
resultL.quot, numerL, denomL, resultL.rem);
return 0;
}
注意: 如果 denom 参数为零,则 ldiv() 函数会产生一个异常情况。此外,如果两个参数中有一个或两个都是负数,则商和余数的计算规则将根据 C 标准进行调整。
#include <stdio.h>
#include <stdlib.h>
#include <search.h>
int compare(const void *a, const void *b)
{
return (*(int*)a - *(int*)b);
}
int main()
{
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
unsigned int * number = (unsigned int *)&n;
int key = 2;
int *result;
result = (int *)lfind(&key, arr, number, sizeof(int), compare);
if (result != NULL) {
printf("\n%d is found at index %lld\n", key, result - arr);
} else {
printf("\n%d is not found in the array\n", key);
}
return 0;
}
#include <stdio.h>
#include <math.h>
int main()
{
double x = 100.0;
double result = log10(x);
printf("The logarithm base 10 of %lf is %lf.\n", x, result);
return 0;
}
11.3 运行结果
12. longjmp
12.1 函数说明
函数声明
函数功能
void longjmp(jmp_buf env, int val);
跳转到指定的程序位置并恢复相应的上下文环境
unsigned long _lrotl(unsigned long value, int shift);
它是 Windows 系统特有的函数,用于将 32 位无符号整数按位循环左移。
参数:
value : 要进行循环左移的 32 位无符号整数
shift : 左移的位数
返回值:
左移后的结果。
14.2 演示示例
#include <stdlib.h>
#include <stdio.h>
int main()
{
unsigned long result;
unsigned long value = 2;
result = _lrotl(value, 2);
printf("The value %lu rotated left one bit is: %lu\n", value, result);
return 0;
}
注意: _lrotl() 函数是 Windows 系统特有的函数,在其他操作系统或编译器下可能不可用或使用方式有所不同。此外,由于该函数只适用于 32 位无符号整数,如果需要对 64 位整数进行位移操作,则需要使用其他函数。
char *ltoa(long value, char *str, int radix);
用于将长整型数值转换为字符串格式
参数:
value : 要转换的长整型数值
str : 保存转换结果的字符缓冲区指针
radix : 要转换的进制数(如2进制、 10 进制、16 进制等),取值范围为 2~36
返回值:
指向转换结果的指针(即 str 参数的值)
17.2 演示示例
#include <stdio.h>
#include <stdlib.h>
int main()
{
long value = 123456789L;
char str[20];
ltoa(value, str, 2);
printf("The result of converting %ld to binary string is: %s\n", value, str);
ltoa(value, str, 10);
printf("The result of converting %ld to decimal string is: %s\n", value, str);
ltoa(value, str, 16);
printf("The result of converting %ld to hexadecimal string is: %s\n", value, str);
return 0;
}
char *lltoa(long long value, char *str, int radix);
用于将长长整型数值转换为字符串格式
参数:
value : 要转换的长长整型数值
str : 保存转换结果的字符缓冲区指针
radix : 要转换的进制数(如 2进制、10 进制、16 进制等),取值范围为 2~36
返回值:
指向转换结果的指针(即 str 参数的值)
18.2 演示示例
#include <stdio.h>
#include <stdlib.h>
int main()
{
long long value = 123456789012345LL;
char str[20];
lltoa(value, str, 2);
printf("The result of converting %lld to binary string is: %s\n", value, str);
lltoa(value, str, 10);
printf("The result of converting %lld to decimal string is: %s\n", value, str);
lltoa(value, str, 16);
printf("The result of converting %lld to hexadecimal string is: %s\n", value, str);
return 0;
}