- 再论数据类型
short和int的表示范围不同,本质差异是什么?
- 不同类型的本质在于:
-占用的内存大小不同
如:short占用2字节,int占用4字节。
-表示数据的具体方式不同
1. 正整数用原码表示,负整数用补码表示。
2. 正整数和浮点数的二进制表示不同。
- 位运算时需要明确知道的事
-操作数的类型(占用的内存大小)
-操作数的正数还是负数(占用的内存大小)
-不同类型的操作数先自动对齐在进行位运算(补符号位)
short a=1;
int b=4;
int c=a|b;
printf("c=%d\n",c);
- 示例
# include<stdio.h>
int main()
{
short a=1;
short b=2;
int c= a - b;
c =c 》4;
printf(" c = %d\n",c);
c =c * - 1 * 16 》4;
printf("c=%d\n",c);
实践操作
(1)
(2)如果是左移两位(16《 2)
- 小结论
-正数符号位为0,右移运算时,高位补0,低位移除
-负数符号位为1,右移运算时,高位补1,低位移除
-左移运算时,最高位移除,低位补0
- 最高位的具体位置,有数据类型决定
- 类型补充小知识
- char-字符型,一个字节的整形,范围[-128,127]
- 字符数据(单引号括起来的字符)的本质是整型数
- char类型的变量可以打印为整数或字符
示例分析
char c='A';
short a=c;
int b=c;
printf("c=%c\n",c);
printf("c=%d\n",c);
printf("a=%d\n",a);
printf("b=%d\n",b);
c=0x40;
printf("c=%d\n",c);
c=c<<1;
printf("c=%d\n",c);
- 实践操作
如下两幅图可知,最后计算的与实际的不符,
这是因为
如果将c再左移一位会怎样?