2014-10-24 2 views
1

Если я объявляю целое число в C, как показано ниже:Удалить ведущие нули из целого числа в C

int an_example = 000300; 

Могу ли я каким-то образом «отрезать» ведущие нули из целого числа? Я хочу, чтобы 000300 интерпретировался как 300.

+5

Это восьмеричное число в исходном коде C, так как оно начинается с 0. Числа не имеют нулей, только их представление может иметь некоторые. –

+2

Нет, эти ведущие нули делают число восьмеричным. – Cornstalks

+1

Зачем вам это нужно? – user1336087

ответ

4
000300 

Это восьмеричная константа. Это может быть более сжато написано как

0300 

Это значение равно десятичному значению 192.

Если вы хотите, десятичное число 300, написать

300 

Но очень ясно, что 0300 != 300.

Если вам нужно что-то более конкретное, попробуйте запустить эту программу. Теперь вы должны быть в состоянии предсказать его вывод:

#include <stdio.h> 

int main(void) 
{ 
    printf("%d\n", 000300); 
    printf("%d\n", 0300); 
    printf("%d\n", 300); 
    return 0; 
} 
2

Путь целое отформатирован для отображения совершенно не зависит от того, как вы инициализировать его.

(Кстати, ведущий 0 на целочисленной константы означает, что он интерпретируется как восьмеричное число.)

2

Могу ли я каким-то образом «отрезать» ведущие нули из числа intenger? Я хочу, чтобы 000300 интерпретировался как 300.

Целые числа всегда имеют одинаковое внутреннее представление - вы не беспокоитесь о проблемах форматирования, таких как ведущие нули. Как отметил @BasileStarynkevitch в комментариях, ведущий 0 в целочисленной константе заставляет компилятор интерпретировать число как восьмеричное или базовое 8. Если вы удалите ведущие нули из предоставленного вами кода, то an_example изменится с 300 октал (192 десятичных) до 300 десятичных (454 восьмеричных).

Как вы дисплейan_example - это другое дело, и все зависит от используемого вами спецификатора формата. Например, если вы хотите напечатать номер в восьмеричной системе, но без ведущего 0, вы бы использовать %o спецификатор:

printf("%o", an_example); 

Если вы хотите напечатать его в виде десятичного числа, используйте %d вместо %o выше.

С другой стороны, если вы хотите напечатать его с ведущим 0, чтобы указать, восьмеричной, вы бы написать:

printf("%#o", an_example); 
6

Если вы пишете 0 в начале целого литерала, это означает, что номер восьмеричный. 300 октал равно 192 десятичным, поэтому вы получите значение 192 из этого кода.

Отключить ведущие нули клавишей удаления на клавиатуре.

3

Важно понимать, что числа могут быть выражены в четырех общих представлениях в C. Бинарные, восьмеричные, десятичные и шестнадцатеричные.

Например:

Binary (основание 2):

0b100101100 // 300 в двоичной системе, ведущий 0b вместе говорит компилятору его двоичное значение (не все компиляторы поддерживают это).

восьмеричное (основание 8)

0300 // Это в десятичной системе 192. Ведущее 0 сообщает компилятору, что значение равно восьмеричному.

шестнадцатеричный (основание 16)

0x12C // 300 в десятичной системе. Ведущий 0x сообщает компилятору, что значение шестнадцатеричное.

Ваш номер: 000300 - восьмеричное число и представляет 192 в десятичном значении, поскольку у вас есть ведущее 0. Обратите внимание, что лишние начальные нули не влияют на значение.

Что касается вашего вопроса: Нет, вы не можете включать ведущие нули и компилятор интерпретирует значение как десятичное.

+0

исправно, спасибо. – ffhaddad

+2

Обратите внимание, что двоичная нотация '0b' стандартизирована в C++ 14 и является расширением стандарта C в другом месте. –

+0

@ Джонатан Леффлер Есть 3 типа людей в мире: те, кто разделяет мир на [два] (http://en.wikipedia.org/wiki/C%2B%2B14#Binary_literals), и те, т. :-) – chux

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