Знак операции | Операция |
- | Арифметическое отрицание |
~ | Поразрядное логическое отрицание (дополнение) |
! | Логическое отрицание |
* | Разадресация |
& | Адрес |
+ | Унарный плюс |
Sizeof | Размер |
++ -- | Операции единичного приращения |
Операции разадресации и адреса используются для работы с переменными типа указатель.
Операция ”адрес” (”&”) дает адрес своего операнда.
Операция разадресации (”*”) осуществляет косвенный доступ к адресуемой величине через указатель. Операнд должен быть указателем. Результатом операции является величина переменной, на которую указывает операнд.
Операция * — операция обращения по адресу (не знаем адрес, но обращаемся к нему).
Пример:
int x, y =10, *address;
address=&x;
*address=y;
printf(“y=%d x=%d”,y,x);
Операции единичного приращения:
++ – приращение положительно (инкремент).
-- – приращение отрицательно (декремент).
Операции увеличения (++) и уменьшения (--) являются унарными операциями присваивания. Они соответственно увеличивают или уменьшают значение операнда на единицу.
|
|
Операнд должен быть:
1. Целого типа.
2. Плавающего типа.
3. Адрес (указатель).
Для целого и плавающего типа увеличение или уменьшение происходит на "1".Операнд адресного типа увеличивается или уменьшается на размер объекта, который он адресует.
Существует две формы:
1. Префиксная — сначала приращение, потом действие.
2. Постфиксная — сначала действие, потом приращение.
Пример:
#include<stdio.h>
#include<windows.h>
int main()
{
int a,b,c,d,r,s;
float g,f,h;
char *pChar;
int *pInt;
a=b=1;
s=a+b++;
printf("a=%d b=%d s=%d\n",a,b,s); // a=1 b=2 s=2
c=d=3;
r=c+ ++d;
printf("c=%d d=%d r=%d\n",c,d,r); // c=3 d=4 r=7
c=d=3;
r=c+++d;
printf("c=%d d=%d r=%d\n",c,d,r); // c=4 d=3 r=6
c=d=3;
r=c+++d++;
printf("c=%d d=%d r=%d\n",c,d,r); // c=4 d=4 r=6
c=d=3;
r= --c+d++;
printf("c=%d d=%d r=%d\n",c,d,r); // c=2 d=4 r=5
g=3.5;
f=4.2;
h=++g+--f;
printf("g=%f f=%f h=%f\n",g,f,h); // c=4.5 f=3.2 h=7.7
char cChar='a';
pChar=&cChar;
printf("cChar=%c, pChar=%p cChar=%c pChar=%p\n",cChar,&cChar,*pChar,pChar);
cChar++;
pChar=&cChar;
printf("cChar=%c cChar=%p \n",cChar,&cChar);
// Поразрядное логическое отрицание (дополнение)
unsigned char cVar1=140,cVar2;
cVar2=~cVar1;
printf("cVar1=%d\tcVar2=%d\n",cVar1,cVar2); // 140 115
printf("cVar1=%c\t\tcVar2=%c\n",cVar1,cVar2); // M s
return 0;
}