基本数据类型--有符号数、无符号数及移位

论坛 期权论坛 脚本     
匿名技术用户   2021-1-7 13:09   11   0


无符号数

MAX+1->MIN MIN-1->MAX


无符号与有符号相加减

unsigned int i=5;

int j=-10;

if((i+j)<0)

printf("true\n");

else

printf("false\n");

结果:false

原因: 运算原则:无符号与有符号数进行计算,有符号数会看作无符号数,结果为无符号数

printf("%d\n",(i+j)) ;

result:-5

原因:%d将结果以有符号数显示(仅是显示的结果) %u显示无符号数的结果

移位运算

左移 (逻辑左移,即右边空位补0)

有符号数在内存中以补码形式存储,所以移动的话会移动符号位

0x1100 1001 << 2 --> 0x0010 0100


char c=-128;

printf("%d\n",c<<1);

c为-128,在内存中应该为11000 0000,最高位为符号位,由于char类型只占8位,所以应该是1000 0000,左移1位后按理应为0000 0000,但是结果为-256

原因:使用%d,打印按照int型打印,int型4字节,可以存放比超过8位的负数

修改代码如下

char c=-128;

c=c<<1;

printf("%d\n",c);

结果为0

右移(对于有符号的数是算术右移,即左边空位补符号位的数)

0x1100 1001 >> 2 --> 0x1111 0010


--------------------------------------------------------------------

17-3-8

移位的数必须为整数类型

char和short隐式转换为int后进行移位操作

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP