Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Programmation C » Opérateurs (16 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
supprimé000 Ecrit le: Lundi 5 septembre 2005 à 02:48 Déconnecté(e)    Voir le profil de supprimé000 Envoyer un email à supprimé000 Envoyer un message privé à supprimé000  

Bon, j'aimerais avoir une explication détaillée de l'utilisation et du fonctionnement des opérateurs << et >>.
Merci.
    
./Post n°1   Marquer comme non lu.
Kevin Kofler Ecrit le: Lundi 5 septembre 2005 à 03:43 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


<<n est un décalage de n bits vers la gauche (revient à multiplier par 2^n), >>n est un décalage de n bits vers la droite (revient à diviser par 2^n). Pour les nombres signés, x>>n remplit x par des bits 1 au lieu des bits 0, ce qui revient à une division signée par 2^n avec arrondi vers moins l'infini: (-1)>>1 est toujours -1, ce qui revient à calculer (-1)/2 et d'arrondir vers moins l'infini.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°2   Marquer comme non lu.
supprimé000 Ecrit le: Lundi 5 septembre 2005 à 04:54 Déconnecté(e)    Voir le profil de supprimé000 Envoyer un email à supprimé000 Envoyer un message privé à supprimé000  

Ok, mais quel est l'intérêt d'utiliser ses opérateurs ? Et par ricochet comment fonctionne les ROM_CALLs rowread et keytest ?
    
./Post n°3   Marquer comme non lu.
Link Ecrit le: Lundi 5 septembre 2005 à 10:11 Déconnecté(e)    Voir le profil de Link Envoyer un email à Link Visiter le site WEB de Link Envoyer un message privé à Link  

#1: Donc, >> utilise un ASR et non un LSR? C'est le standard?

#2: rowread et keytest ne sont pas des ROM_CALLs: rowread est une fonction de la librairie, qui règle le clavier pour lire une certaine ligne de celui-ci, attend 48 cycles (enfin, il me semble avoir lu qu'il fallait le temps de douze NOP) pour que le clavier réagisse et retourne la valeur lue de la ligne correspondante. Et si je me souviens bien, keytest est une macro utilisant rowread.
    
./Post n°4   Marquer comme non lu.
Sasume Ecrit le: Lundi 5 septembre 2005 à 12:30 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

Link :
#1: Donc, >> utilise un ASR et non un LSR?
Pour les nombres signés, oui.
Et il me semble que le standard ne précise rien à ce niveau.
-Edité le Lundi 5 septembre 2005 à 12:31 par Sasume-
    
./Post n°5   Marquer comme non lu.
Jfg Ecrit le: Lundi 5 septembre 2005 à 13:15 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


#2 -> ca permet de multiplier et diviser des nombres rapidement (ce qui est important quand tu fais des calculs à virgule fixe). En utilisant "&" et "|", ca permet aussi d'accéder à des bits particuliers dans un octet.
Kill Mario
    
./Post n°6   Marquer comme non lu.
Folco Ecrit le: Lundi 5 septembre 2005 à 14:19 Déconnecté(e)    Voir le profil de Folco Envoyer un email à Folco Envoyer un message privé à Folco  


asm(btst.b ...) ou un truc du genre :p
<<< Kernel Extremist©®™ >>>
Pas la peine d'aller là plus d'une fois tous les six mois...

"Il faut apprendre pour savoir qu'il faut apprendre pour savoir."
    
./Post n°7   Marquer comme non lu.
Lionel Debroux Ecrit le: Lundi 5 septembre 2005 à 15:23 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

> rowread est une fonction de la librairie, qui règle le clavier pour lire une certaine ligne de celui-ci, attend 48 cycles (enfin, il me semble avoir lu qu'il fallait le temps de douze NOP) pour que le clavier réagisse et retourne la valeur lue de la ligne correspondante.
Il y a une différence importante entre le minimum (douze NOPs, en effet) et ce que le _rowread de TIGCCLIB attend, et il y a encore une grande différence avec ce que AMS fait en interne (OSKeyScan / AI1). J'avais proposé à Kevin de faire un _rowread / _keytest dont le temps d'attente (nombre d'itérations d'une boucle dbf sur elle-même) est paramétrable.

> Et si je me souviens bien, keytest est une macro utilisant rowread.
Oui.
Lionel Debroux - membre de TICT.
    
./Post n°8   Marquer comme non lu.
Kevin Kofler Ecrit le: Lundi 5 septembre 2005 à 21:23 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Link :
#1: Donc, >> utilise un ASR et non un LSR? C'est le standard?

C'est implementation-defined, et pratiquement tous les compilateurs C sérieux utilisent ASR pour les nombres signés et LSR pour les non signés. C'est la solution préférée, l'autre n'est permise par le standard C que parce que certains vieux processeurs n'ont pas d'instruction ASR.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°9   Marquer comme non lu.
Kevin Kofler Ecrit le: Lundi 5 septembre 2005 à 21:27 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Et sinon:
epsilon :
Ok, mais quel est l'intérêt d'utiliser ses opérateurs ?

  • Multiplier et diviser rapidement par des puissances de 2, et faire des calculs qui ont besoin de telles multiplications/divisions.
  • Appliquer un scrolling ou décalage horizontal (utilisé aussi dans l'affichage d'un sprite).
  • et toutes les autres opérations qui nécessitent de décaler des bits. ;)
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°10   Marquer comme non lu.
supprimé000 Ecrit le: Mardi 6 septembre 2005 à 03:07 Déconnecté(e)    Voir le profil de supprimé000 Envoyer un email à supprimé000 Envoyer un message privé à supprimé000  

ASR, LSR #confus#
    
./Post n°11   Marquer comme non lu.
Kevin Kofler Ecrit le: Mardi 6 septembre 2005 à 03:28 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Arithmetic Shift Right (extension de signe) vs. Logical Shift Right (extension par 0).
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°12   Marquer comme non lu.
supprimé000 Ecrit le: Mercredi 7 septembre 2005 à 02:58 Déconnecté(e)    Voir le profil de supprimé000 Envoyer un email à supprimé000 Envoyer un message privé à supprimé000  

Et qu'est-ce que ça fait concretement ?
    
./Post n°13   Marquer comme non lu.
Link Ecrit le: Mercredi 7 septembre 2005 à 07:26 Déconnecté(e)    Voir le profil de Link Envoyer un email à Link Visiter le site WEB de Link Envoyer un message privé à Link  

Ça décale les bits d'un nombre vers la droite: Chaque décalage d'un bit vers la droite équivaut à une division par deux. (C'est comme en décimal, où chaque décalage d'un chiffre vers la droite équivaut à une division par dix...)

LSR fait un décalage logique, décalant bêtement le nmonbre et insérant des zéros à sa gauche.
ASR fait un décalage arithmétique, c'est-à-dire qu'au lieu d'insérer toujours des zéros à gauche il recopie le bit de poids fort du nombre (bit de signe), ce qui lui permet de réaliser une extension de signe en même temps que le décalage. (Ce qui ne marche que si les nombres négatifs sont codés en "complément à deux", ce qui est le plus courant pour les entiers)
-Edité le Mercredi 7 septembre 2005 à 07:27 par Link-
    
./Post n°14   Marquer comme non lu.
Thor Ecrit le: Mercredi 7 septembre 2005 à 12:33 Déconnecté(e)    Voir le profil de Thor Envoyer un email à Thor Visiter le site WEB de Thor Envoyer un message privé à Thor  


et donc si on décale 0b11111111de 8 rang vers la droite on obtient zéro? Car moi je suis sur une fonction de scrolling et ellene marche pas top :(
Cyril MOTTIER aka {==Thor==}
Modérateur général du forum de Tigen
[Etudiant à l'Institut National des Sciences Appliquées (INSA) de Rennes]
Mon site perso c'est ici
    
./Post n°15   Marquer comme non lu.
Folco Ecrit le: Mercredi 7 septembre 2005 à 12:51 Déconnecté(e)    Voir le profil de Folco Envoyer un email à Folco Envoyer un message privé à Folco  


si tu décales $FF vers la gauche de 8 bits, ils faut que tu transposes les bits sortnts sur l'octet suivant. Je pense que c'est plus simple et plus rapide avec une rotation masquée, mais je me suis pas penché sur les méthodes d'affichage, alors je ne suis pas sûr. Lionel t'expliquerait ça très bien. :)
<<< Kernel Extremist©®™ >>>
Pas la peine d'aller là plus d'une fois tous les six mois...

"Il faut apprendre pour savoir qu'il faut apprendre pour savoir."
    
./Post n°16   Marquer comme non lu.
Link Ecrit le: Mercredi 7 septembre 2005 à 13:15 Déconnecté(e)    Voir le profil de Link Envoyer un email à Link Visiter le site WEB de Link Envoyer un message privé à Link  

C'est pour cela que le scrolling est plus facile sur 68k si on n'a qu'un seul pixel à scroller:
l'instruction ROXL/ROXR (ROtate with X bit Left/Right) permet de scroller un mot mémoire en gardant en retenue le bit sorti pour le réinjecter dans le mot suivant...

Pour les scrollings avec plusieurs bits, je crois que ça scrolle un octet dans un mot, ou un mot dans un long, pour ensuite utiliser le masque pour remplacer la zone correspondante de l'image...
    
  :: Index » Forum Ti68K » Programmation C » Opérateurs (16 réponse(s))
Pages : 1/1     « [1] » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 82.74ms avec 18 requetes