두 개의 8 비트 2의 보수 결과 인 10111011
과 11010101
의 결과는 무엇이며 어떻게 계산할 것입니까?두 개의 8 비트 2의 보수 바이너리 숫자 추가
0
A
답변
2
이것은 아마도 괜찮은 프로그래밍 계산기로 말할 수 있지만, 8 비트로 감싼다면, 이것이 결과입니다.
[ hex,unsigned,signed]
10111011 [0xBB, 187, -69]
+ 11010101 [0xD5, 213, -43]
--------
= (1)10010000 [0x90, 144, -112]
다음과 같이 수동으로이 과정을 수행 할 수 있습니다
이set carry to zero
for each position starting at right side, progressing left:
set sum to carry
add bit from position in first number to sum
add bit from position in second number to sum
if sum is greater than one:
subtract two from sum
set carry to one
else
set carry to zero
end if
store sum to position of result
end for
0
2의 보수의 좋은 점은 당신이 서명 또는 부호없는 숫자 여부를 당신이 알 필요가 없다는 것입니다. 이진 표현을 취하고 오버플로 비트를 추가하고 삭제합니다. 당신이 표현할 수있는 숫자의 범위를 버린 경우, 잘, 힘든 행운. 그러나 2 개의 음수를 추가하고 긍정적 인 것을 얻는 것은 의혹을 제기해야한다.
실제 노트에: 같은 질문 것들에 의해 C에서 오버 플로우를 방지하기 하지 시도를 수행
a = b+c;
if (((b > 0) && (a < c)) || ((b < 0) && (a > c))) {
...
}
이 아마 표준 디버그 빌드에서 작동 것이지만, C (및 C++) 컴파일러가 허용된다 이 수표를 멀리 낙찰하십시오. (부호가없는 산술에 대해서는 더 자주 보입니다. if (a >= (a+b)) { ... }
및 gcc -Wall
은 거짓임을 경고합니다. C 표준은 오버플로가 정의되지 않은 동작이라고 설명하므로 어쨌든 괜찮습니다.)
잘 모르겠 음 제한된 범위의 정수형을 가진 다른 언어에서 상황은 어떠합니까?
관련 문제
- 1. 어셈블리에 두 개의 64 비트 숫자 추가
- 2. 2의 보수 뺄셈
- 3. 음수를 2의 보수 바이너리 형식으로 변환하는 방법은 무엇입니까?
- 4. 16 비트 부호있는 정수 (2의 보수)의 MSB와 LSB를 결합하십시오.
- 5. 부호가있는 2의 보수 산술
- 6. ASM 질문, 2의 보수
- 7. 2의 보수 형태로 된 64 비트 음의 정수
- 8. 16 비트 정수를 파이썬에서 두 개의 8 비트 정수로 나누기
- 9. 은 정상적인 덧셈과 같은 두 개의 양수가 2의 보수로 추가됩니까?
- 10. 최대 두 개의 숫자
- 11. Ruby - Bignum/Fixnum의 2의 보수 표현을 포함하는 바이트 배열 반환
- 12. 비트 단위의 보수 연산자
- 13. 자바에서 두 개의 큰 숫자 (512 비트)를 곱하는 방법
- 14. 텍스트 필드에 문자열로 입력 된 두 개의 숫자 추가
- 15. 두 개의 앱에서 "유니버설 바이너리"를 만드시겠습니까?
- 16. 두 개의 바이너리 파일에서 일치하는 시퀀스 찾기
- 17. Python에서 UTF-8 숫자 처리
- 18. 숫자 델타를 생성하는 두 개의 문자열 비교
- 19. 두 개의 숫자 사이의 피보나치 시리즈
- 20. Ruby에 PKCS # 8 바이너리 키를로드하십시오.
- 21. C#에서 24 비트, 리틀 엔디안, 2의 보수 값을 정수로 변환하는 모범 사례?
- 22. 두 개의 레이블 텍스트 추가?
- 23. excel 파일에 두 개의 추가 열 추가
- 24. PHP 8 자리 숫자 질문
- 25. 두 개의 비트 맵에서 픽셀 블렌드
- 26. 엡실론 값과의 차이점을 비교하는 대신 2 개의 보수를 사용하여 두 개의 두 점을 비교하는 이유는 무엇입니까?
- 27. Regex Help - 적어도 두 개의 알파 문자와 두 개의 숫자 문자가있는 6 개의 문자열을 적용 하시겠습니까?
- 28. PHP : 두 개의 16 비트 정수를 32 비트 정수로 결합
- 29. 파이썬에서 64 비트 길이를 얻기 위해 두 개의 32 비트 int를 "연결"하는 방법은 무엇입니까?
- 30. Windows에서 64 비트 바이너리 확인
... 존재하는 경우 오버플로 비트가 설정됩니다. ;) – Lucero
수동으로 오버플로 비트를 추가해야했습니다. 'end for' 후에'result [0] = carry'를 추가합니다. 내가 놓친 게 있니? –
@James, 만약 당신이 8 비트 밖에 가지고 있지 않다면, 보통 0에서 7까지의 비트이므로 'carry'를'result [0]'에 넣는 것은 잘못된 것입니다. 그리고 비트가 1부터 8까지라면'result [0] '은 8 비트가 아닌 _nine_ 비트를 가짐을 의미합니다. 대개 무슨 일이 일어나는가는 결과가 랩되고 캐리의 최종 값이이를 나타낼 것입니다. – paxdiablo