Первоначально смотря на него, почти похоже, обрубили ли Вы последние 6 цифр, Вы получили бы разумную Дату Unix с помощью преобразователь онлайн
1231721701 = понедельник, 12 января 2009 0:55:01 GMT
1227217588 = четверг, 20 ноября 2008 21:46:28 GMT
, которое дополнительные 6 цифр могли форматировать связанный или некоторые расширенные атрибуты.
существует некоторый пример кода для преобразование Меток времени Unix , если это на самом деле, каково это.
Проблемы с "!!" идиома в том, что это кратко, трудно увидеть, легко принять за опечатку, легко отбросить один из «!» и так далее. Я поместил его в категорию «посмотри, какие милые мы можем быть с C / C ++».
Просто напишите bool isNonZero = (integerValue! = 0);
... будьте ясны.
Исторически идиома !!
использовалась, чтобы гарантировать, что ваш bool действительно содержит одно из двух значений, ожидаемых в переменной, подобной bool
, потому что в C и C ++ не было истинного типа bool
, и мы подделали его с помощью int
s. Теперь это не проблема с «настоящими» bool
s.
Но использование !!
является эффективным средством документирования (как для компилятора, так и для будущих людей, работающих в ваш код), что да, вы действительно намеревались преобразовать этот int
в bool
.
Потому что! integerValue означает integerValue == 0 и !! integerValue, таким образом, означает integerValue! = 0, допустимое выражение, возвращающее bool. Последний - кастинг с потерей информации.
Логическое значение может иметь только два состояния, 0 и 1. Целое число может иметь любое состояние от -2147483648 до 2147483647, предполагая 32-битное целое число со знаком. Унарный! оператор выводит 1, если на входе 0, и 0, если на входе что угодно, кроме 0. Итак! 0 = 1 и! 234 = 0. Второй! просто переключает вывод так, что 0 становится 1, а 1 становится 0.
Таким образом, первая инструкция гарантирует, что booleanValue будет установлено равным 0 или 1 и никакое другое значение, а вторая инструкция - нет.
Нет особой причины, кроме параноика или воплей в коде, что это логическое значение.
для компилятора, в конце концов, это не имеет значения.
Мне никогда не нравился этот метод преобразования в тип данных bool
- он плохо пахнет!
Вместо этого мы используем удобный шаблон под названием ] boolean_cast
найдено здесь . Это гибкое решение, которое более четко описывает то, что оно делает, и может использоваться следующим образом:
bool IsWindow = boolean_cast< bool >(::IsWindow(hWnd));