# How to add integers without correction?

조회 수: 8(최근 30일)
Dejia Kong 2021년 9월 14일
댓글: Jan 2021년 9월 23일 9:20
when using integer class such as int8 in matlab, and some calculation result is bigger than the upper range (for int8 , the upper range is 127), matlab would automatically set the value to the maximum.
eg.
a=int8(126);
b=int8(2);
c=a+b; % matlab would gives c=127, since 128 exceed the upper range of int8
but in some cases, i want to get a negetive result, like many programming languages do
i want c to be -128 because 01111110+00000010=10000000 and it's -128 for int8
this could be done by a "bitadd" like
while (int2 ~=0)
carry=bitand(int1,int2);
int1=bitxor(int1,int2);
int2=bitshift(carry,1);
end
end
however this is very inefficient, since a while loop in the function
Setting the result to maximum should be additional correction, so is there a faster method to do bitwise add without such correction?

댓글을 달려면 로그인하십시오.

### 채택된 답변

Jan 2021년 9월 14일
a = int8(126);
b = int8(2);
tic
for k = 1:1e4
end
toc
Elapsed time is 0.141335 seconds.
tic
for k = 1:1e4
end
toc
Elapsed time is 0.068172 seconds.
while (int2 ~=0)
carry = bitand(int1,int2);
int1 = bitxor(int1,int2);
int2 = bitshift(carry,1);
end
end
m = typecast(int16(a) + int16(b), 'int8');
c = m(1);
end
##### 댓글 수: 3표시숨기기 이전 댓글 수: 2
Jan 2021년 9월 23일 9:20
It will be much faster to use int16 in general and crop the higher bits during the addition. In my tests this is 10 times faster, but I did not get the correct results when the overflow appears.

댓글을 달려면 로그인하십시오.

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!