Dacă octetul este un număr întreg de 8 biți, atunci cum îl putem seta la 255? (Programare, C#)

Alex Gordon a intrebat.

Cuvântul cheie byte denotă un tip integral care stochează valori așa cum este indicat în tabelul următor. Este un întreg fără semn pe 8 biți.

Dacă are doar 8 biți, atunci cum putem să-i atribuim valoarea 255?

byte myByte = 255;

Credeam că 8 biți este același lucru cu un singur caracter?

Comentarii

  • În .net, 1 caracter este de 16 biți (UTF-16) –  > Por Marc Gravell.
  • Vă dați seama că șirul „255” și numărul 255 sunt două lucruri diferite, nu-i așa? –  > Por Seva Alekseyev.
  • @Marc Gravell – Tot mi se pare amuzant din punct de vedere semantic faptul că un singur caracter este echivalent cu un cuvânt. –  > Por Joel Etherton.
  • @Mulțumesc foarte mult tuturor pentru clarificări –  > Por Alex Gordon.
  • @Joel tocmai ai folosit un singur caracter ca fiind un cuvânt de 3 ori în acest comentariu (de fapt, și eu) 😉 – user164771
9 răspunsuri
Joel Etherton

Caracterele sunt descrise (într-un sens elementar) printr-o reprezentare numerică ce se încadrează într-o structură de 8 biți. Dacă vă uitați la Codurile ASCII pentru caracterele ascii, veți vedea că acestea sunt legate de numere.

Numărul întreg pe care îl poate reprezenta o secvență de biți este generat de formula 2^n – 1 (așa cum a fost descrisă parțial mai sus de @Marc Gravell). Astfel, o structură de 8 biți poate conține 256 de valori, inclusiv 0 (rețineți, de asemenea, că numerele TCPIP sunt 4 secvențe separate de structuri de 8 biți). Dacă acesta ar fi fost un întreg cu semn, primul bit ar fi fost un indicator pentru semn, iar restul de 7 ar fi indicat valoarea, astfel încât, deși ar fi conținut 256 de valori, dar maximul și minimul ar fi fost determinate de cei 7 biți de la urmă (deci 2^7 – 1 = 127).

Când se ajunge la caractere Unicode și la caractere „high ascii”, codificarea necesită mai mult decât o structură pe 8 biți. Astfel, în exemplul dvs., dacă ar fi să atribuiți unui octet o valoare de 76, ar putea fi consultat un tabel de căutare pentru a obține caracterul ascii v.

Jesper Fyhr Knudsen

Există 256 de configurații diferite de biți într-un octet

0000 0000
0000 0001
0000 0010
...
1111 1111

Deci, puteți atribui unui octet o valoare în intervalul 0-255.

Powerlord

111111111111 (8 pe biți) este 255: 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1

Poate că confundați acest lucru cu 256, care este 2^8?

Marc Gravell

8 biți (fără semn) este 0 până la 255, sau (2^8)-1.

Este sună ca și cum ați confunda reprezentările de date întregi și text.

Dan Tao

am crezut că 8 biți este același lucru cu un singur caracter?

Cred că confunzi numărul 255 cu șirul „255”.

Gândește-te în felul următor: dacă calculatoarele ar stoca numerele intern folosind caracterecum le-ar stoca pe cele caracterele? Folosind biți, nu?

Deci, în acest scenariu ipotetic, un computer ar folosi biți pentru a reprezenta caracterele pe care le-ar folosi la rândul său pentru a reprezenta numere. În afară de faptul că este oribil din punct de vedere al eficienței, acest lucru este pur și simplu redundant. Bitii pot reprezenta direct numere.

Comentarii

  • Ei bine, COBOL face acest lucru. Și multe baze de date își definesc numerele în termeni de lungime zecimală. Zeii știu de ce… –  > Por Nyerguds.
UGEEN

255 = 2^8 – 1 = FF[hex] = 1111111111[bin]

pm100

intervalul de valori pentru 8 biți fără semn este de la 0 la 255. deci este perfect valabil.

8 biți nu este același lucru cu un caracter în c#. În c#, caracterul are 16 biți. Și chiar dacă caracterul este de 8 biți nu are nicio relevanță pentru întrebarea principală

Yona

Cred că confunzi codificarea caracterelor cu valoarea integrală reală stocată în variabilă.

O valoare pe 8 biți poate avea 255 de configurații așa cum a răspuns Arkain
Opțional, în ASCII, fiecare dintre aceste configurații reprezintă un caracter ASCII diferit
Deci, în principiu depinde cum interpretezi valoarea, ca valoare întreagă sau ca un caracter

Tabelul ASCII
Wikipedia despre ASCII

FuzzyQuills

Sigur, un pic cam târziu pentru a răspunde, dar pentru cei care găsesc asta la o căutare pe Google, iată…

Așa cum au spus și alții, un caracter este cu siguranță diferit de un număr întreg. Faptul că este pe 8 biți sau nu este irelevant, dar pot ajuta prin simpla precizare a modului în care funcționează fiecare:

pentru un număr întreg pe 8 biți, este posibil un interval de valori între 0 și 255 (sau -127..127 dacă este semnat, iar în acest caz, primul bit decide polaritatea)

pentru un caracter pe 8 biți, acesta va fi cel mai probabil un caracter ASCII, la care se face de obicei referire printr-un index specificat cu o valoare hexazecimal, de exemplu FF sau 0A. Deoarece computerele de pe vremuri aveau doar 8 biți, rezultatul a fost un tabel 16×16, adică 256 de caractere posibile în setul de caractere ASCII.

În orice caz, dacă octetul are o lungime de 8 biți, atunci atât o adresă ASCII, cât și un număr întreg pe 8 biți vor încăpea în datele variabilei. Totuși, pentru simplitate, aș recomanda utilizarea unui alt tip de date mai dedicat. (de exemplu, char pentru ASCII sau date brute, int pentru numere întregi de orice lungime de bit, de obicei pe 32 de biți).

Tags: