Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
cours
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
algorithmique
cours
Commits
1763ff2a
Verified
Commit
1763ff2a
authored
3 years ago
by
orestis.malaspin
Browse files
Options
Downloads
Patches
Plain Diff
added complement 2
parent
1dc785ad
No related branches found
No related tags found
No related merge requests found
Pipeline
#14700
passed
3 years ago
Stage: test
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
slides/cours_4.md
+117
-1
117 additions, 1 deletion
slides/cours_4.md
with
117 additions
and
1 deletion
slides/cours_4.md
+
117
−
1
View file @
1763ff2a
...
@@ -429,7 +429,123 @@ Que donne la multiplication de `1101` avec `0110`?
...
@@ -429,7 +429,123 @@ Que donne la multiplication de `1101` avec `0110`?
# Entiers signés (1/N)
# Entiers signés (1/N)
*
La représentation qu'on vient de voir
Pas de nombres négatifs encore...
## Comment faire?
. . .
## Solution naïve:
*
On ajoute un bit de signe (le bit de poids fort):
```
00000010: +2
10000010: -2
```
## Problèmes?
. . .
*
Il y a deux zéros (pas trop grave):
`10000000`
et
`00000000`
*
Les additions différentes que pour les non-signés (très grave)
```
00000010 2
+ 10000100 + -4
---------- ----
10000110 = -6 != -2
```
. . .
# Entiers signés (2/N)
## Beaucoup mieux
*
Complément à un:
*
on inverse tous les bits:
`1001 => 0110`
.
## Encore un peu mieux
*
Complément à deux:
*
on inverse tous les bits,
*
on ajoute 1 (on ignore les dépassements).
. . .
*
Comment écrit-on
`-4`
en 8 bits?
. . .
```
4 = 00000100
________
-4 => 00000100
11111011
+ 00000001
----------
11111100
```
# Le complément à 2 (1/2)
## Questions:
*
Comment on écrit
`+0`
et
`-0`
?
*
Comment calcule-t-on
`2 + (-4)`
?
*
Quel est le complément à 2 de
`1000 0000`
?
. . .
## Réponses
*
Comment on écrit
`+0`
et
`-0`
?
```
+0 = 00000000
-0 = 11111111 + 00000001 = 100000000 => 00000000
```
*
Comment calcule-t-on
`2 + (-4)`
?
```
00000010 2
+ 11111100 + -4
---------- -----
11111110 -2
```
*
En effet
```
11111110 => 00000001 + 00000001 = 00000010 = 2.
```
# Le complément à 2 (1/2)
## Quels sont les entiers représentables en 8 bits?
. . .
```
01111111 => 127
10000000 => -128 // par définition
```
## Quels sont les entiers représentables sur $N$ bits?
. . .
$$
-2^{N-1} ... 2^{N-1}-1.
$$
## Remarque: dépassement de capacité en `C`
*
Comportement indéfini!
<!-- # TODO --
<!-- # TODO --
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment