1、将一个64位数拆成两个32位数。
//将一个64位数拆成两个32位数
int f_64bit_to_two32bits(/*long long value*/)
{
long long value_l;
long long value_h;
long long value = 8589934591;//低32位都是1;高32位只有一个1.
long long value1 = 167 * 1e8;
long long c = 8589934591;
long long a = c & 0x00000000ffffffff;//低32位:4294967295
long long b = c >> 32;//高32位:1
value_h = value >> 32;
value_l = value & 0xffffffff;
int num = 1;
return 0;
}
2、分别取出小数的整数、小数部分。
/*分别取出小数的整数、小数部分 */
void splitfloat(double x, int *intpart, double *floatpart)
{
*intpart = x / 1;
*floatpart = x - *intpart;
}
3、C++ 保留 六位 有效数字 方法
C++是一种面向对象的高级编程语言,它广泛应用于计算机程序开发和编程教育领域。对于需要处理数字的程序来说,保留有效数字是一个非常基础的操作,也是重要的程序优化技巧之一。在C++编程中,保留六位有效数字的方法如下:
(1)使用setprecision控制输出精度
在C++中,我们可以使用setprecision来控制浮点数的输出精度。setprecision默认情况下可输出浮点数的全部有效数字,但是我们可以通过以下代码将其设置为保留六位有效数字:
cout << fixed << setprecision(6) << num << endl;
其中fixed表示使用固定小数点模式输出,num表示待输出的浮点数。
(2)强制浮点数转化为字符串类型
使用to_string函数将浮点数转化为字符串类型,再通过substr函数截取需要的有效数字即可。具体代码如下:
string num_str = to_string(num);
string six_digits_str = num_str.substr(0, num_str.find('.') + 7);
float six_digits_float = stof(six_digits_str);
to_string函数将浮点数转化为字符串类型,substr函数用于截取所需的有效数字,并将结果存储在six_digits_str字符串中。最后使用stof函数将six_digits_str字符串转化为浮点数类型,即可得到保留六位有效数字的结果。
4、随机数生成
生成随机数;
生成指定范围的随机数;
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i = 0;
int n = 10;
srand((unsigned int)time(NULL));//将系统时间作为种子值
for (i = 0; i < 10; i++)
{
//生成随机数
int ret = rand();
printf("%d ", ret);
}
printf("\n\n");
for (i = 0; i < 10; i++)
{
//随机数落在[0,n],生成的数与(n+1)整除,所以不包含n+1
int ret = rand() % (n + 1);
printf("%d ", ret);
}
printf("\n\n");
for (i = 0; i < 10; i++)
{
//随机数落在[1,n]
int ret = rand() %n + 1;
printf("%d ", ret);
}
time_t;
printf("\n\n");
return 0;
}
//flag=1:随机数落在[0,n]; flag=2:随机数落在[1,n];
void rand_number(int n, int flag, int num)
{
int i = 0, m=0;
//int n = 10, ret[10];
int *ret = new int[num];
for (i = 0; i < num; i++)
{
ret[i]=0;
}
srand((unsigned int)time(NULL));//将系统时间作为种子值
if (1 == flag && n != 0)
{
for (i = 0; i < num; i++)
{//随机数落在[0,n],生成的数与(n+1)整除,所以不包含n+1
ret[i] = rand() % (n + 1);
}
}
else if (2 == flag && n != 0)
{
for (i = 0; i < num; i++)
{//随机数落在[1,n]
ret[i] = rand() % n + 1;
printf("%d,,,", ret[i]);
}
}
else
{
for (i = 0; i < num; i++)
{//生成随机数
ret[i] = rand();
}
}
time_t;
for (i = 0; i < num; i++)
{
printf("%d,,,", ret[i]);
}
delete[] ret;
}
//生成不重复的随机数
//flag=1:随机数落在[0,n]; flag=2:随机数落在[1,n];
void norepeat_rand_number(int n, int flag, int num)
{
int i = 0, j = 0, r = 0;
//int arr[10];
int *arr = new int[num];
srand((int)time(0));//用当前时间作为随机种子
while (i < num)
{
if (1 == flag && n != 0)
{//随机数落在[0,n],生成的数与(n+1)整除,所以不包含n+1
r = rand() % (n + 1);//生成一个1-10的随机数
}
else if (2 == flag && n != 0)
{//随机数落在[1,n]
r= rand() % n + 1;
}
else
{//生成随机数
r = rand();
}
for (j = i; j >= 0; j--)
{
if (r == arr[j]) //与之前已存的随机数比较
break;
}
if (j < 0) //没有重复即保存到数组中
{
arr[i] = r;
i++;
}
}
while (i--) //从数组中输出这10个范围在1-10的不重复的随机数
{
printf("\r\n rand_num[%d] = %d,,,\n", num - i, arr[i]);
}
delete[] arr;
}