首页 > 代码库 > 有符号数,符号位扩展
有符号数,符号位扩展
char readbuf[64];
int data_size = (readbuf[7]<<24)|(readbuf[4]<<16)|(readbuf[5]<<8)| readbuf[6];
int data_size = (readbuf[7]<<24)+(readbuf[4]<<16)+(readbuf[5]<<8)+readbuf[6];
readbuf : 09 00 3c 16 00 00 96 00 00 00 00
readbuf[6]=0x96, 十进制-106
因为 readbuf[6]是无符号数,虽然readbuf[7] 4 5都是0,但是转变成32位时,高位都扩展为符号位,所以不管是或还是加,data_size 都变成了 0xffffff96 (-106)
十六进制相同的一个数,在有符号为负数时,有符号、无符号的移位操作的结果是不同的,有符号的高位将补F,而无符号的补0。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。