bits.c

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

C
128
字号
#define	EXTERN#include "gc.h"/*Bitsbor(Bits a, Bits b){	Bits c;	int i;	for(i=0; i<BITS; i++)		c.b[i] = a.b[i] | b.b[i];	return c;}*//*Bitsband(Bits a, Bits b){	Bits c;	int i;	for(i=0; i<BITS; i++)		c.b[i] = a.b[i] & b.b[i];	return c;}*//*Bitsbnot(Bits a){	Bits c;	int i;	for(i=0; i<BITS; i++)		c.b[i] = ~a.b[i];	return c;}*/intbany(Bits *a){	int i;	for(i=0; i<BITS; i++)		if(a->b[i])			return 1;	return 0;}/*intbeq(Bits a, Bits b){	int i;	for(i=0; i<BITS; i++)		if(a.b[i] != b.b[i])			return 0;	return 1;}*/intbnum(Bits a){	int i;	long b;	for(i=0; i<BITS; i++)		if(b = a.b[i])			return 32*i + bitno(b);	diag(Z, "bad in bnum");	return 0;}Bitsblsh(unsigned n){	Bits c;	c = zbits;	c.b[n/32] = 1L << (n%32);	return c;}/*intbset(Bits a, unsigned n){	int i;	if(a.b[n/32] & (1L << (n%32)))		return 1;	return 0;}*/intBconv(va_list *arg, Fconv *fp){	char str[STRINGSZ], ss[STRINGSZ], *s;	Bits bits;	int i;	str[0] = 0;	bits = va_arg(*arg, Bits);	while(bany(&bits)) {		i = bnum(bits);		if(str[0])			strcat(str, " ");		if(var[i].sym == S) {			sprint(ss, "$%ld", var[i].offset);			s = ss;		} else			s = var[i].sym->name;		if(strlen(str) + strlen(s) + 1 >= STRINGSZ)			break;		strcat(str, s);		bits.b[i/32] &= ~(1L << (i%32));	}	strconv(str, fp);	return 0;}

⌨️ 快捷键说明

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