2013-02-08 4 views
1

Я пытаюсь эту простую программу C, чтобы разделить число ..Простой C Программа деления числа

void main() 
{ 
int i,j,k; 
i=00126; 
j=2; 
k=i/j; 
printf("%d",k); 
} 

Он показывает выход, как 43 вместо 63 .. Если я ставлю другой 0, как

i=000126; 

сейчас я получаю ошибку как нелегальную восьмеричную цифру.

Если я пытаюсь

i=00000001000; 

он не показывает ошибку и выдает результат в виде 256..I не могли понять этот неожиданный вывод. Может ли кто-нибудь сказать, почему он производит такие результаты?

Четкие пояснения будут оценены.

Edit: Если бы я попытался

int i,j,k; 
i=1000; 
j=0002; 
k=i/j; 
printf("%d",k); //which gives 500 as result 
+2

Что вы пытаетесь сделать? Разделить восьмеричные или целые числа? Вы не можете иметь начальные нули ... –

+3

Если вы начинаете свои цифры с нуля, они находятся в восьмеричном. 126 oct = 86 раз. – ElPaco

+0

i = 00000001000; может быть i = 0b000001000; ? Каков ваш компилятор? –

ответ

4

В C, номер, начинающийся с 0 в базе 8 (восьмеричная) не десятичную. Таким образом, ваш номер 0126 действительно 86 в десятичном формате.

В то время как на эту тему цифры, начинающиеся с 0x, также являются шестнадцатеричными (основание 16), например 0x1a5.

0

При префиксе целое число с 0 оно интерпретируется как восьмеричное (базовое 8) число. Таким образом, 0126 на самом деле является 86.

2

Любое числовое число в C, начиная с 0, является восьмеричным числом.

So (0126) октябрь = (86) десятичный.

Редактировать

На основе комментариев, взгляните на статью о positional notation для чисел.

+0

Если я пытаюсь 050/2, он дает результат как 50? –

+0

@ ling.s, вы уверены !? Это '40/2'. Поэтому он должен давать 20. – StoryTeller

+0

извините 50/02, что дает 25 –

1

00126 считывается как восьмеричное число (64 + 2 * 8 + 6 = 86). Итак, 43 верно. Напишите 126, если вы хотите десятичное число 126.

Смежные вопросы