과제에서 일하고 있으며이를 구현하는 방법을 알 수 없습니다. 나는 sadd (int x, int y) 함수를 만들어야한다. sadd (int x, int y)는 오버플로하지 않는 한 함께 더해진 숫자를 반환한다. 나는 캐스팅과 조건문을 포함하는 몇 가지 솔루션을 생각해 낼 수 있었지만 솔루션에서는 허용되지 않았다. ~ 연산자 만!^+ < < >> & 및 |.C (HW)의 비트 포화 추가
답변
부호가있는 숫자를 추가 할 경우 두 개의 동일한 기호를 추가하고 다른 기호로 결과를 얻으면 오버플로가 발생했습니다. 범위가 있기 때문에 서로 다른 두 개의 숫자를 추가 할 때 오버플로를 생성하는 것은 불가능합니다.
그래서 할 수있는 일은 부호 비트 (2의 보수 중 가장 중요한 것)를 보는 것입니다. 배타적 논리합을 사용하여 원래의 두 숫자가 부호가 다른지 여부를 확인하고 보완하면됩니다. 동일하지 않은 경우 '0', 다른 경우 '1'.
그런 다음 하나의 결과 대 하나의 결과에 대해 배타적 논리합을 사용할 수 있습니다. 동일하다면 '0', 다를 경우 '1'을 줄 것입니다.
이 두 결과는 두 입력이 동일하지만 결과가 다를 경우 전반적인 '1'을 얻고, 그렇지 않은 경우 '0'을 얻습니다.
그런 다음 Shift 및 OR 조합을 사용하여 해당 값으로 전체 정수를 채울 수 있습니다. 32 비트 정수라고 가정하면 가장 낮은 값의 31 비트를 설정하여 가장 큰 양의 정수를 얻습니다. 그런 다음 입력 중 하나의 부호 비트에 대한 유사한 시프트 및 OR 집합을 사용할 수 있습니다. 독점적 인 또는 결과. 입력 값이 음수이면 정수 값이 가장 낮습니다.
EDIT : 오, 오버플로가 있었는지 여부를 비트 값을 사용하여 int 채우기 위해 어떤 값을 선택하여 오버플로가있을 경우 반환 할 결과를 anding하여 그것을 보완하고 anding 그 결과를 정상적인 가산 결과와 함께 두 개의 oring (or 추가)합니다.
Presto : 모든 이진 논리, 조건 없음. 나는 숙제이기 때문에 실제 코드를 원하지 않는다고 가정합니다.
- 1. 비트 배열에 추가
- 2. 비트 맵을 HTML에 추가
- 3. 포인터에 64 비트 오프셋 추가
- 4. ARM에서의 빠른 포화 및 시프트 두 하프 워드 asm
- 5. 채도가있는 32 비트 단어 추가
- 6. Excel 32 비트 64 비트 추가 기능 사용
- 7. C#에서 비트 맵 비트 크기 줄이기
- 8. 는 WPF는 이미지에 동적 비트 맵을 추가
- 9. C/C++ : 6 비트 ASCII를 7 비트 ASCII로 변환하는 방법
- 10. C++ 비트 번호 목록
- 11. C 비트 단위 시프트
- 12. C#의 비트 필드
- 13. C# 비트 맵 질문
- 14. C 비트 연산 질문
- 15. c - 비트 연산의 어려움
- 16. c, 비트 식, 논리식
- 17. 멀티 테넌트 시스템에서 누락 된 포화 기술은 무엇입니까?
- 18. C++ Qt : 비트 단위 연산
- 19. C#에서 비트 스트림 디자인
- 20. 포화/50 및 색상/50을 나누는 목적은 무엇입니까?
- 21. 추가/C#
- 22. 어셈블리에 두 개의 64 비트 숫자 추가
- 23. 비트 단위 Or : C# 대 C++
- 24. 비트 버킷 포인터가있는 방법이 있습니까? (C/C++)
- 25. 128 비트 xmm 레지스터의 상위 64 비트 및 하위 64 비트 추가
- 26. 두 배로 C++ 스왑 비트
- 27. C#의 모든 비트 쓰기
- 28. C# DataGridView 비트 값 (WinForms)
- 29. C++ 비트 패턴을 Java로 변환
- 30. C 비트 조작 문자 배열
숙제 질문하기는 괜찮지 만 숙제로 태그를 지정해야합니다. –
시도해보고 올리는 내용을 게시하십시오. (Brian이 말했듯이, HW 질문은 괜찮지 만 최선을주고 코드를 게시하는 것이 더 좋습니다.) – John
'if' /'else'가 없으면 이것은 해커가 될 것입니다 .. –