I am using data type unsigned short on two functions. An input function and an output function.
for example if users type like
the problem is, the function can only take 2^(15) -1 or 32767. I can't figure out the problem. For instance if your input is over 32767, it gives wrong result.Code:unsigned short x =100; unsigned short y; y = input(x); y = output(x); cout<<y; //the output should be 100
Here is the code for both function
I think the problem may be in this line of codeCode:unsigned short Input(unsigned short usData) { unsigned short usOutputBit = 0; static int nRegisterBitValue = 0; unsigned short usResult = 0; unsigned short usResult2 = 0; unsigned short usInputBit; unsigned short usBit; int i; usInputBit = usData; for (i = 0; i < 16; i++) { usBit = (usInputBit & 0x8000) ? 1 : 0; usOutputBit = usBit ^ nRegisterBitValue; nRegisterBitValue = usOutputBit; usInputBit = usInputBit << 1; usResult = (usOutputBit | 0x8000) | usResult2; usResult = usResult << 1; usResult2 = usResult; if(usInputBit == 0) { usResult = usResult >> 1; } } return(usResult); } unsigned short Output(unsigned short usData) { unsigned short usOutputBit = 0; unsigned short usResult2 = 0; static int nRegisterValue = 0; unsigned short usResult = 0; unsigned short usInputBit; unsigned short usBit; int i; usInputBit = usData; for (i = 0; i < 16; i++) { usBit = (usInputBit & 0x8000) ? 1 : 0; usOutputBit = usBit ^ nRegisterValue; nRegisterValue = usBit; usInputBit = usInputBit << 1; usResult = (usOutputBit | 0x8000) | usResult2; usResult = usResult << 1; usResult2 = usResult; if(usInputBit == 0) { usResult = usResult >> 1; } } return(usResult); }
usResult = (usOutputBit | 0x8000) | usResult2;
which I use to pack the bit together




Reply With Quote