zapisanie komórki pamięci do odpowiednich innych komórek

0

treść zadania:

[code]W komórce pamięci znajduje się 8-bitowa liczba -114. Została ona zapisana do
zmiennej przechowującej znaki (np. char), zmiennej przechowującej liczby całkowite
16-bitowe, zmiennej przechowującej liczby naturalne 8-bitowe oraz zmiennej
przechowującej liczby całkowite 4-bitowe. Jakie wartości będą przechowywać
poszczególne zmienne? Odpowiedzi uzasadnić.[/code]

po pierwsze, 8 bitowa liczba repezentująca -114 to:
[code]1000 1110[/code]

rozumiem, że wszedzie probujemy załadować te wartość.

jeśli zapiszemy ją do char, będzie to co się wtedy stanie????

do zmiennej przechowującej liczby całkowite
16-bitowe: [code]1111 1111 1000 1110[/code]

zmiennej przechowującej liczby naturalne 8-bitowe:
[code]0000 1110[/code] czyzbysmy tutaj zmieniali tylko 1 bit ??

zmiennej
przechowującej liczby całkowite 4-bitowe:
Zostanie wyzsza czy nizsza połowa??
[code]1110[/code] chyba nizsza?

0
  1. Char ma 8 bitów, nie stanie się nic. Oczywiście wypisanie tego znaku wypisze nam znak o kodzie ascii -114 + 128 = 14 czyli jakiegoś krzaka
  2. 16 bitów uzupełni się zerami (tzn uzupelnią sie te brakujące ofc! 16 bitów to było w domyśle zmienna 16 bitowa)
  3. Tak samo jak przy char, tylko że znów próba wypisania takiej liczby spowoduje odczytanie jej "bez znaku" więc to będzie 142
  4. Raczej dolna połówka.
0

przy wypisaniu czemu dodałeś 128 ?
Napisałem sobie taki kod w C#:
[code] int aes = -114, char abc = convertToChar(aes); [/code] i go chcialem wypisac, to miałem overflow, hm??
2. 16 bitów uzupełni się zerami , jesteś tego pewien ?? , że będziemy mieli 16 zer? hmm... ?
4. no lower-half, ale mamy na myśli to samo. hm??

0

char(8bit): 1000 1110 = 142 - 128(bo tyle znaków rozumi tablica ASCII) = 14, czyli jakiś krzaczek.

short short (16bit): 0000 0000 1000 1110, czyli 142.
liczba naturalna 8bit: 1000 1110 = 142
liczba 4bit - 1110 = 14.

To zachowanie(overflow) jest w pełni zgodne z dokumentacją.

OverflowException
value is less than Char.MinValue or greater than Char.MaxValue.

http://msdn.microsoft.com/en-us/library/609e20th%28v=vs.110%29.aspx

The value of this constant is hexadecimal 0x00.
[...]
The value of this constant is hexadecimal 0x00.

http://msdn.microsoft.com/en-us/library/system.char.minvalue%28v=vs.110%29.aspx

Shalom się widocznie machnął - 8 bitów uzupełni się zerami.

Co do samego char wiele zależy od specyfikacji języka, którego używasz. Możliwe, że gdzieś istnieje język, który znak wychodzący poza tablicę ASCII ustawi na NULL, zignoruje taki znak, lub zignoruje pierwszy bit.

0

"(bo tyle znaków rozumi tablica ASCII) " to ja wiem, ze tyle ma, pytam sie czemu dodajecie? no niestety, w zadaniu nie ma podanej specyfikacji jezyka, zadanie jest jakie jest.
"short short (16bit): 0000 0000 1000 1110, czyli 142." czemu nie uzupelnia sie jedynkami np. ?? wtedy bd, taka sama liczba. tj. -114

0

Uzupełnia się zerami, żeby liczba nie zmieniła wartości. Komputery stworzyli i zaprogramowali ludzie i zrobili to tak, żeby im było wygodnie, nie komputerom (chociaż akurat to komputerom jest obojętne). Nikt by nie był zadowolony, gdyby po rzutowaniu z int na long long magicznie zmieniał się rozmiar.

0

a Czemu w assemblerze kod
10001110 , czyli: -114(U2)

org 100h
start:

mov bx,0
pobieranie:
mov ah,2
mov dl,10001110b
int 21h


mov ax,4c00h
int 21h

wyświetli znaczek z kodu ASC II , o liczbie 142 ?
a nie wspomnianą 14 ?

0

Ponieważ 10001110(2) = 142(10)

1 użytkowników online, w tym zalogowanych: 0, gości: 1