int main() { int n; printf("Enter the number n :"); scanf("%d",&n); printf("Trailing zeros :%d\n",count_zeros(n)); return 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 }
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; } } } }