Delphi中Integer转Byte类型(负数转换)问题咨询
Integer转Byte时的数值差异解析
你测试的代码如下:
var B: Byte; I: Integer; begin I := -10; B := I; end;
出现这种结果的核心原因是计算机中整数以补码形式存储和运算,具体拆解:
- 32位Integer类型的-10,在内存中存储的是它的补码:
11111111 11111111 11111111 11110110 - 当赋值给Byte类型时,只会截取这个二进制数的低8位,也就是
11110110 - Byte是无符号8位类型,直接将这8位二进制转换为十进制:
128+64+32+16+4+2 = 246,也就是你看到的256-10的结果
你预期的10是-10原码的低8位,但计算机处理负数时用的是补码,所以转换后得到的是补码对应的无符号值,而非原码的低字节数值。
内容的提问来源于stack exchange,提问作者DevSergo
相关产品推荐
相关产品推荐

