将一个64位数拆成两个32位数

本文介绍了如何在C++中将64位数拆分为两个32位数,处理浮点数的小数部分,以及使用setprecision保留六位有效数字的方法。同时展示了生成随机数的基本技巧。
摘要由CSDN通过智能技术生成

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;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值