For faster navigation, this Iframe is preloading the Wikiwand page for Znakowy typ danych.

Znakowy typ danych

Z Wikipedii, wolnej encyklopedii

Ten artykuł od 2022-04 wymaga zweryfikowania podanych informacji.Należy podać wiarygodne źródła, najlepiej w formie przypisów bibliograficznych.Część lub nawet wszystkie informacje w artykule mogą być nieprawdziwe. Jako pozbawione źródeł mogą zostać zakwestionowane i usunięte. Po wyeliminowaniu niedoskonałości należy usunąć szablon ((Dopracować)) z tego artykułu.

Znakowy typ danych (ang. character data type) – typ danych stosowany w wielu językach programowania, reprezentujący jeden znak tekstu.

Realizacja i właściwości

Typ znakowy jest realizowany poprzez określony kod znaku, w zależności od implementacji może to być ASCII, EBCDIC, Unicode lub inny. Zapis konkretnej wartości typu znakowego w kodzie źródłowym dokonuje się za pomocą literału znakowego. W takich językach jak C czy C++, typ znakowy to po prostu 1-bajtowa liczba całkowita ze znakiem, w przypadku typu signed char, lub bez znaku, dla typu unsigned char. Natomiast w Pascalu, typ znakowy nie jest typem liczbowym i do konwersji typu używa się funkcji Asc lub Chr.

Popularne implementacje

Java

  • char

C/C++

  • char
  • signed char
  • unsigned char

Fortran

  • character

Pascal

  • char

Przykłady zastosowań

Przykład w C

Przykładowe działania na zmiennej typu char:

#include <stdio.h>

char abs(char c_char)
{
   if (c_char >= 0)
   {
      return c_char;
   }
   return -c_char;
}

int main()
{
   char c_znak;
   c_znak = 'a';
   /* widzimy, że znak jest zapisany jako liczba. */
   printf("Znak %c = %d.\n", c_znak, c_znak);
   /* prosta operacja: */
   c_znak+= 4; // zwiększenie znaku o 4
   printf("Po zwiększeniu o 4, znak %c = %d.\n", c_znak, c_znak);
   /* różnica dwóch znaków: */
   char c_znak2 = 'o';
   printf("między znakami %c (%d) a %c (%d) jest %d różnicy.\n",
      c_znak, c_znak, c_znak2, c_znak2, abs(c_znak - c_znak2));
   /* inne zastosowanie typu char (proste obliczenia arytmetyczne): */
   for (unsigned char i = 0; i < 16; ++i)
   {
      printf("%d * %d + 2 = %d\n", i, i, i * i + 2);
   }
}

Wynik działania:

Znak a = 97.
Po zwiększeniu o 4, znak e = 101.
Między znakami e (101) a o (111) jest 10 różnicy.
0 * 0 + 2 = 2
1 * 1 + 2 = 3
2 * 2 + 2 = 6
3 * 3 + 2 = 11
4 * 4 + 2 = 18
(...)

Przykład w Fortranie

Przykład (zmienna buffer o długości 128 B):

 character*(128) buffer

 buffer = 'abc'
 l = len(buffer) 
 buffer = buffer(:l) + 'cdef '
 l = len(buffer)
 buffer = buffer(:3) // ' xyx ' // buffer(4:) // ' pqr   '
 print *, '#' // buffer(:len(buffer))// '#'

Wynik działania - na wyjściu zobaczymy:

 #abc xyx cdef  pqr   #

Powyżej wykorzystano:

  1. standardową funkcję len określającą pozycję od lewej ostatniego znaku różnego od NUL (chcąc odrzucić końcowe spacje należy użyć funkcji len_trim)
  2. tworzenie wycinka zmiennej var typu character:
    • znaki nr m do n (włącznie): var(m:n)
    • od początku do nr n włącznie: var(:n)
    • od znaku nr m do końca: var(m:)
  3. konkatenację łańcuchów: operator // lub +

Zobacz też

{{bottomLinkPreText}} {{bottomLinkText}}
Znakowy typ danych
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.