БлогNot. О программном поиске INT_MAX и дополнительном коде числа...

Помощь дата->рейтинг Поиск Почта RSS канал Статистика nickolay.info Домой

О программном поиске INT_MAX и дополнительном коде числа...

Пара полезных функций от сегодня, чтоб не стирать:

Тестовая программа должна одинаково сработать как в консоли нового Visual Studio, так и, допустим, в старом консольном Borland C++ 3.1 или в консольном проекте C++ Builder. Полный код примера:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>

int get_max_int () { 
 //получить максимальное int со знаком в зависимости от sizeof(int)
 int a=0;
 int size=sizeof(a)*8;
 int max=0;
 for (int i=0; i<size-1; ++i) max|=(1<<i);
 return max;
}

int convert(int a) { 
 //преобразовать a в дополнительный код
 unsigned int half=(unsigned int)get_max_int()+1u;
 if (a < 0) a = ( ~-a|half ) + 1;
 return a;
}

char * print_b (int a) { 
 //напечатать в новую строку int a (со знаком) как цепочку бит
 int size=sizeof(a)*8;
 char *buf = new char [size+1];
 for(int i=size-1; i>=0; --i) buf[size-1-i] = a & (1<<i)?'1':'0';
 buf[size]='\0';
 return buf;
}

void main() {
 int a = 127;
 int b = convert(a);
 printf ("\nmax_int = %d",get_max_int());
 printf ("\na=%d (%s), b=%d (%s)",a,print_b(a),b,print_b(b));   
 getchar(); 
}

теги: числа программирование c++

13.10.2015, 17:54; рейтинг: 4149

  свежие записипоиск по блогукомментариистатистика

Наверх Яндекс.Метрика
© PerS
вход