void bit_calcu()//位运算{ int i = 6; short f = 0x70ff; f = f << 1; printf("f<<1=%d\n", f); printf("i<<1=%d\n", i << 1); printf("i=%d\n", i);}
大家好,这是我的一段代码,想知道为什么f左移后,打印出来变成负数,麻烦解释的通俗易懂一点,谢谢
收起
int 字节第一位是符号位,0为正数,1为负数。70ff 二进制 0111 0000 1111 1111左移1后,第一位变成了1。
只改变第一位
左移
那这个与short四字节运算还有溢出什么的有关系吗
你可以看一下sizeof(short),一般是2字节,也就是图片中间的WORD,0-15int 一般是4字节,图上计算器中要用DWORD,0-31
int a=1;a1=a<<31;//a1=-2147483648,证明1移到符号位上了,没有保留符号值a2=a1>>31;//a2=-1,保留了符号值也就是左移不保留符号值,但无论右移多少位都保留符号值;好奇怪啊。
报告相同问题?
程序员都在用的中文IT技术交流社区
专业的中文 IT 技术社区,与千万技术人共成长
关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!