Вопросы по теме 'integer-promotion'

Пример использования getopt (). Сравнение int с char
Привет всем, надеюсь, вы поможете мне понять, почему getopt использовал int и как обрабатывается переменная optopt в getopt. Довольно новичок в C ++. Если посмотреть на getopt, optopt определяется как целое число....
2673 просмотров
schedule 20.09.2021

Почему этот вызов функции неоднозначен?
Я читаю стандарт и пытаюсь понять, почему этот код не будет разрешен без приведения. void foo(char c) { } // Way bigger than char void foo(unsigned long int) { } int main() { foo(123456789); // ambiguous foo((unsigned long int) 123456789);...
2065 просмотров

Почему имеет значение, используются ли сдвиги влево и вправо вместе в одном выражении или нет?
У меня такой код: unsigned char x = 255; printf("%x\n", x); // ff unsigned char tmp = x << 7; unsigned char y = tmp >> 7; printf("%x\n", y); // 1 unsigned char z = (x << 7) >> 7; printf("%x\n", z); // ff Я ожидал,...
1192 просмотров

что быстрее, mov или movzx в сборке?
Узнав о целочисленном продвижении, я придумал два кода, потому что мне было любопытно, как целочисленное продвижение будет происходить на языке ассемблера. #include <stdio.h> int main(void) { short a = 5; short b = 9; short p =...
76 просмотров
schedule 13.09.2021

Что происходит с поразрядными операторами и целочисленным продвижением?
У меня простая программа. Обратите внимание, что я использую беззнаковое целое число фиксированной ширины размером 1 байт. #include <cstdint> #include <iostream> #include <limits> int main() { uint8_t x = 12;...
6818 просмотров

Комплексное продвижение и оператор + =
Мне нужно устранить предупреждения gcc -Wconversion. Например typedef unsigned short uint16_t; uint16_t a = 1; uint16_t b = 2; b += a; дает warning: conversion to 'uint16_t {aka short unsigned int}' from 'int' may alter its value...
187 просмотров
schedule 12.03.2022

Добавление двух символов дает int
Я сделал простую программу и скомпилировал ее с помощью GCC 4.4/4.5 следующим образом: int main () { char u = 10; char x = 'x'; char i = u + x; return 0; } g++ -c -Wconversion a.cpp И у меня есть следующее: a.cpp: In function...
11152 просмотров

Портативный способ получить int32_t, переданный в функцию с переменным числом аргументов
7.16.1.1 2 описывает va_arg следующим образом (выделено мной): Если фактического следующего аргумента нет или если тип несовместим с типом фактического следующего аргумента (как продвигается в соответствии с продвижением аргумента по...
1157 просмотров

введите продвижение в C
Меня очень смущает следующий код: #include <stdio.h> #include <stdint.h> int main(int argc, char ** argv) { uint16_t a = 413; uint16_t b = 64948; fprintf(stdout, "%u\n", (a - b)); fprintf(stdout, "%u\n", ((uint16_t)...
8870 просмотров
schedule 06.05.2022

Целочисленное продвижение — какие шаги
Этот код печатает B2 short a=-5; unsigned short b=-5u; if(a==b) printf("A1"); else printf("B2"); Я читал о целочисленном продвижении, но мне все еще непонятно, как это работает в примере здесь? Может ли кто-нибудь подробно...
3903 просмотров
schedule 06.05.2022

Почему реализации stdint.h расходятся в определении UINT8_C?
Макрос UINT8_C определен в "stdint.h" со следующей спецификацией : Макрос UINTN_C(value) должен расширяться до целочисленного константного выражения, соответствующего типу uint_leastN_t . Однако в дикой природе реализации различаются:...
1048 просмотров
schedule 08.07.2022

Вопрос об обычных арифметических преобразованиях - компилятор GCC
Я пытаюсь понять неявные преобразования типов данных в C. Я думал, что понял эту тему, но все же следующий пример кода все еще сбивает меня с толку. В частности, я читал об обычных арифметических преобразованиях и преобразовании целых чисел ранее...
104 просмотров

Будут ли char и short повышены до int перед понижением в выражениях присваивания?
После некоторого исследования, которое я знаю в арифметических выражениях, char и short будут переведены в int внутренне. Но мне все еще интересно, будут ли подобные целочисленные продвижения происходить при внутреннем назначении. (Поэтому,...
498 просмотров
schedule 24.09.2022

Почему целые типы продвигаются во время сложения в C?
Итак, у нас возникла проблема с полем, и после нескольких дней отладки мы сузили проблему до этого конкретного фрагмента кода, где обработка в цикле while не происходила: // heavily redacted code // numberA and numberB are both of uint16_t //...
2943 просмотров
schedule 15.06.2023

Преобразование большого конца в С++?
Мне нужна функция C++, которая возвращает значение четырех последовательных байтов, интерпретируемых как bigendian long. Указатель на первый байт должен быть обновлен так, чтобы он указывал после последнего. Я пробовал следующий код: inline...
366 просмотров

Тип char умножается на другой char
Каков тип результата умножения двух символов в C/C++? unsigned char a = 70; unsigned char b = 58; cout << a*b << endl; // prints 4060, means no overflow cout << (unsigned int)(unsigned char)(a*b) << endl; // prints 220,...
1386 просмотров

целочисленное продвижение в c
Допустим, у меня есть 32-разрядная машина. Я знаю, что во время целочисленного преобразования выражения преобразуются в:\ int если все значения исходного типа могут быть представлены в int unsigned иначе Не могли бы вы...
3736 просмотров
schedule 30.10.2022

Сравнение результатов после целочисленного продвижения
Следующая ситуация: У меня есть макросы для хранения дополнения переменной вместе с ее исходным значением в структуре. С помощью другого макроса я хочу проверить, равно ли исходное значение дополнению сохраненного значения дополнения. Но, как ни...
77 просмотров

Есть ли активные предложения по изменению интегральных правил продвижения?
Как уже обсуждалось здесь , интегральные правила продвижения могут вызывать головную боль в некоторых случаях (особенно для арифметических операций между знаковыми и беззнаковыми типами). В конце этого ответа есть ссылка на предложение. Однако...
72 просмотров
schedule 30.05.2023

Какие комплексные акции имеют место при печати char?
Я недавно прочитал это unsigned char x=1; printf("%u",x); вызывает неопределенное поведение, поскольку из-за спецификатора формата% u printf ожидает беззнаковое int. Но все же хотелось бы понять, что происходит в этом примере. Я думаю,...
347 просмотров