나는 막혔다. 나는 몇 시간 동안 내 코드를보고 있었고 무엇이 잘못 됐는지 알 수 없었다. 내 함수는 음수 또는 양수 중 하나를 받아 32 비트 2의 보수 16 진수 표현으로 변환합니다. 내 함수는 문자 배열 (32 비트 부호가있는 크기 표현)을 사용하고 배열의 2의 보수를 취합니다. 그것을 2의 보수로 변환하는 나의 접근법은 특정 문자가 보일 때 단순히 배열에 문자를 할당하는 것입니다. 특수 문자는 배열에 표시된 문자가 첫 번째 문자 인 경우 발생합니다. 나머지는 일반적으로 무효화됩니다. 나는 현재 붙어있다. -23 (부호가있는 크기는 80000017 임) 값을 입력하면 K00000KK 값을 얻습니다. -23452 (부호 량 80005B9C) -> K000KKKK. 나는 값이 'K'가되도록 설정하여 코드가 멈춰있는 곳을 찾았습니다. 원래 값은 '7'이었습니다. 코드에서, 나는 컴파일러가 어디로 가는지 볼 디스플레이 메시지를 넣어C의 2의 보수 코드
for -23 (80000017) input I get the messages
first 1 is seen, leave first 1 the same
first 1 is seen, leave first 1 the same
no one's showed up yet --> 0
no one's showed up yet --> 0
no one's showed up yet --> 0
no one's showed up yet --> 0
no one's showed up yet --> 0
first 1 is seen, leave first 1 the same
거의 내가 처음 한 메시지가 어디 0 내가 얻을 표시되는 경우 표시됩니다 K가 어디 -> 0 메시지를
도움 주셔서 감사합니다. 매우 감사! 여기
는char* two_complement(int number, char* sign_mag_array){
int first_one_flag = 0;
if(number > 0){
cout << "positive number" << endl;
return sign_mag_array;
}
if(number < 0){
for(int q = 7; q >= 0; q--){
if(first_one_flag == 1){ // negate the rest regularly
cout << "negate normally " << endl;
if(sign_mag_array[q] == '0'){
sign_mag_array[q] = 'F';
}
if(sign_mag_array[q] == '1'){
sign_mag_array[q] = 'E';
}
if(sign_mag_array[q] == '2'){
sign_mag_array[q] = 'D';
}
if(sign_mag_array[q] == '3'){
sign_mag_array[q] = 'C';
}
if(sign_mag_array[q] == '4'){
sign_mag_array[q] = 'D';
}
if(sign_mag_array[q] == '5'){
sign_mag_array[q] = 'A';
}
if(sign_mag_array[q] = '6'){
sign_mag_array[q] = '9';
}
if(sign_mag_array[q] == '7'){
sign_mag_array[q] = '8';
}
if(sign_mag_array[q] == '8'){
sign_mag_array[q] = '7';
}
if(sign_mag_array[q] = '9'){
sign_mag_array[q] = '6';
}
if(sign_mag_array[q] == 'A'){
sign_mag_array[q] = '5';
}
if(sign_mag_array[q] == 'B'){
sign_mag_array[q] = '4';
}
if(sign_mag_array[q] = 'C'){
sign_mag_array[q] = '3';
}
if(sign_mag_array[q] == 'D'){
sign_mag_array[q] = '2';
}
if(sign_mag_array[q] == 'E'){
sign_mag_array[q] = '1';
}
if(sign_mag_array[q] == 'F'){
sign_mag_array[q] = '0';
}
}
if(sign_mag_array[q] == '0' && first_one_flag == 0){
cout << "no one's showed up yet --> 0 " << endl;
}
else{ // first '1' in binary seen. special negating
//first_one_flag = 1;
cout << "first 1 is seen, leave first 1 the same " << endl;
if(sign_mag_array[q] == '1'){
sign_mag_array[q] = 'F';
}
if(sign_mag_array[q] == '2'){
sign_mag_array[q] = 'E';
}
if(sign_mag_array[q] == '3'){
sign_mag_array[q] = 'D';
}
if(sign_mag_array[q] == '4'){
sign_mag_array[q] = 'C';
}
if(sign_mag_array[q] == '5'){
sign_mag_array[q] = 'B';
}
if(sign_mag_array[q] == '6'){
sign_mag_array[q] = 'A';
}
if(sign_mag_array[q] = '7'){
sign_mag_array[q] = '9';
}
if(sign_mag_array[q] == '8'){
sign_mag_array[q] = '8';
}
if(sign_mag_array[q] == '9'){
sign_mag_array[q] = 'K';
}
if(sign_mag_array[q] == 'A'){
sign_mag_array[q] = '6';
}
if(sign_mag_array[q] == 'B'){
sign_mag_array[q] = '5';
}
if(sign_mag_array[q] == 'C'){
sign_mag_array[q] = '4';
}
if(sign_mag_array[q] == 'D'){
sign_mag_array[q] = '3';
}
if(sign_mag_array[q] == 'E'){
sign_mag_array[q] = '2';
}
if(sign_mag_array[q] == 'F'){
sign_mag_array[q] = '1';
}
}
}
}
return sign_mag_array;
}
는 컴파일러에서 경고를 활성화
당신은 독점 조건을 원한다. – Lundin