mprand.c

来自「这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易」· C语言 代码 · 共 43 行

C
43
字号
#include "os.h"#include <mp.h>#include <libsec.h>#include "dat.h"mpint*mprand(int bits, void (*gen)(uchar*, int), mpint *b){	int n, m;	mpdigit mask;	uchar *p;	n = DIGITS(bits);	if(b == nil)		b = mpnew(bits);	else		mpbits(b, bits);	p = malloc(n*Dbytes);	if(p == nil)		return nil;	(*gen)(p, n*Dbytes);	betomp(p, n*Dbytes, b);	free(p);	// make sure we don't give too many bits	m = bits%Dbits;	n--;	if(m > 0){		mask = 1;		mask <<= m;		mask--;		b->p[n] &= mask;	}	for(; n >= 0; n--)		if(b->p[n] != 0)			break;	b->top = n+1;	b->sign = 1;	return b;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?