int main() {
    int n;
    printf("Enter the number n :");
    scanf("%d",&n);
    printf("Trailing zeros :%d\n",count_zeros(n));
    return 0;
}
Exemple #2
0
static void send_lumitile(uint8_t addr, uint8_t red, uint8_t green, uint8_t blue, uint8_t now)
{
  uint8_t zcnt = 0;

  zcnt += count_zeros(red);
  zcnt += count_zeros(green);
  zcnt += count_zeros(blue);
  if (!now) zcnt |= 0x20;	// Bit 5 = 1--> Kachel speichert die
   // Farbwerte, zeigt sie erst dann
// an, wenn ein Broadcast mit bit5=1 erfolgt.
  tx_word_wait((uint16_t)addr | 0x100);	// Bit 9 wg. Adresse setzen
  tx_word_wait(red);
  tx_word_wait(green);
  tx_word_wait(blue);
  tx_word_wait(zcnt);
}
void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[])
{
    mwSize width, height, nsegms;
	mwSize *sizes;
	unsigned long *image, *o1, *o2, num_elems;
	    /* check argument */
    if (nargin<1) {
        mexErrMsgTxt("One input argument required ( the image in row * column form with the class uint32)");
    }
    if (nargout>2) {
        mexErrMsgTxt("Too many output arguments");
    }    
	sizes = (mwSize *)mxGetDimensions(in[0]);
    height = sizes[0];
    width = sizes[1];

	if (!mxIsClass(in[0],"uint32")) {
        mexErrMsgTxt("Usage: image must be a 2-dimensional uint32 matrix");
    }
	image = (unsigned long *) mxGetData(in[0]);
	unsigned long n_elems = count_zeros(image, width, height);
    out[0] = mxCreateNumericMatrix(n_elems, 1 ,mxUINT32_CLASS, mxREAL);
    out[1] = mxCreateNumericMatrix(NHOOD_SIZE,n_elems,mxUINT32_CLASS, mxREAL);
    if (out[0]==NULL || out[1]==NULL) {
	    mexErrMsgTxt("Not enough memory for the output matrix");
    }
    o1 = (unsigned long *) mxGetPr(out[0]);
    o2 = (unsigned long *) mxGetPr(out[1]);

    find_unique_elems_in_neighborhood(image, width, height, o1, o2);
}
int count_zeros(int n) {
    if(n==0)
        return 0;
    else
        return n/5 + count_zeros(n/5); // count of 5's in prime factors of n
}
Exemple #5
0
static void disassemble_file( remu::binary::Binary* binary )
{
	print_header( binary );

	auto segment_list = binary->getSectionSegments();

	auto symbol_db = binary->getSymbolDB();

	char dis[64];

	for( const auto& segment : segment_list ) {
		if( !segment.executable ) {
			continue;
		}

		printf( "\n" );
		printf( "Disassembly of section %s:\n", segment.name.c_str() );

		uint64_t cur_off = segment.base;
		const uint64_t end = segment.base + segment.size;
		std::vector<uint8_t> cur_section = binary->readSegment( segment );
		remu::util::memslice slice = { cur_section.data(), cur_section.size() };

		while( cur_off < end ) {
			const auto num_zeros = count_zeros( slice );

			const auto symbol = symbol_db.getSymbolExact( cur_off );
			if( symbol ) {
				printf( "\n" );
				printf( "%08lx <%s>:\n", cur_off, symbol->name.c_str() );
			}
			else if( cur_off == segment.base ) {
				printf( "\n" );
				printf( "%08lx <%s>:\n", cur_off, segment.name.c_str() );
			}

			if( count_zeros(slice) >= 8 ) {
				printf( "\t...\n" );
				const auto bytes_to_consume = num_zeros - (num_zeros % 4);

				cur_off += bytes_to_consume;

				slice.data += bytes_to_consume;
				slice.size -= bytes_to_consume;
			}
			else {
				size_t instr_size = disassembler->disassemble( slice, cur_off, dis, 64 );
				printf( "%8lx:\t", cur_off );
				size_t ii = 0;
				for( ; ii < instr_size; ii++ ) {
					printf( "%02x ", slice.data[ii] );
				}
				for( ; ii < 4; ii++ ) {
					printf( "   " );
				}
				printf( "\t%s\n", dis );

				cur_off += instr_size;

				slice.data += instr_size;
				slice.size -= instr_size;
			}
		}
	}
}