10.12

来源:互联网 发布:程序员的一天小品 编辑:程序博客网 时间:2024/06/06 15:00
int a =-12;
printf("%u",a);
//1294947284


当我们用%u格式控制符输出a时,计算机将会把它识别为一个无符号的正整数,此时最高位上原本作为符号位的1将被当做计数位,同时因为整数原码,反码,补码,是一样的,所以直接输出。




类型转换
当不同的类型参与运算时,低字节数据类型自动转换为高字节数据类型,例如   3/1.5   打印的结果将是2.0000.
当给数据赋值时,等号右边的数据类型自动转换成等号左边的的数据类型,例如  int a=1.3,打印结果将是1;




强制转换:
一般形式:(类型名)(表达式)
       例子:(int)(x+y)  把x+y的结果强制转换为int类型
              (int)x+y     把x的结果转换为int类型,然后在加上y
            (double)(3/2)=1.0000     3是整数型,2是整数型,3/2的结果也是整数型。




精度缺失:发生多字节数类型强制转化为少字节数类时,
unsigned short a=256;
char b =a;
prinf(“%d,”b);
0000 0001 0000 0000
          0000 0000 打印结果 


          发生少字节数类型强制转化为多字节数类时,多出的位需要补0或补符号位,取决于多字节的类型是有符号还是无符号。如果是无符号统一补0,如果是有符号,则将低字节的最高位当做符号位去补。
char a = 129;
short b = a;


printf("%d", b);
a 129:       10000001   char占用一个字节
b     -------- -------- short占用两个字节
      -------- 10000001  后面八位直接搬进来
      因为b是有符号类型,所以高八位需要补符号位,而此时符号位是1
      11111111 10000001
      注意:计算机存储是存的二进制补码,所以读取数据还需要把补码变更为原码,正数不用管,负数需要遵循转换原则;
原码=反码取反
反码=补码-1;
反码得到原码:10000000 11111111 即-127; 




运算符:
算术运算符:+-*/,++,——;%;
注意事项:*不可以省略;%只可以用来整形数据之间,运算结果的符号与被除数符号结果相同。
例子:
9%7=2;
3%(-5)=3             3/(-5)=0···3       0*(-5)=3


int a=1234  将1234改为4321:(拆解,加权)
prtinf(“%d”,a%10*1000+a%100/10*100+a%1000/100*10+a/1000);






操作数:参与运算的对象
逻辑运算符:丨
      



                





原创粉丝点击