int a = - 12 ;
printf("%u",a );
//4294967284;
源码:10000000 00000000 00000000 00001100
反码:11111111 11111111 11111111 11110011
补码:11111111 11111111 11111111 11110100
当我们用格式控制符输出a时,计算机
10000000 00000000 00000000 00000011
11111111 11111111 11111111 11111100
11111111 11111111 11111111 11111101\
4294967293
当不同类型的额数据参与运算时,低字节数据会自动转换为高字节数据的类型.
当给数据赋值的时候等号右边的数会自动向等号左边的数据类型转换.
float a = 1.3f b = 1.2f;
float c1 = (int )(a+b), c2= (int )a+b;
printf("%f,%f",c1,c2);
printf("%lf", (double)3/2);
printf("%lf",(double)(3/2));
强制转换得到所需类型的中间变量,原变量类型变量值不变,
精度缺失: 发生在多字节数类型强制转化为少字节数类型时.
short a = 256 ;
cahr b = a ;
printf("%c",b);
01100001
1001100001 609
1101100001 865
10101100001 1377
当少字节数转化为多字节数的时候,多出来的位需要补0或补符号位,取决于多字节数的
类型时有符号还是没符号,如果是无符号,统一补0,如果有符号就将低字节数的最高位当
做符号位去补.
如:
char a = 129;
short b = a ;
a 129: 10000001 char占一个字节
b 占两个字节
10000001 后面八位直接搬进来
因为b是有符号的类型,所以高八位需要补符号位,此时符号位是1
所以补全后的数据储存形式如下;
11111111 10000001
注意 计算机储存的是二进制补码.
所以读取数据时要还原成原码,,正数不用管,负数要遵循转换规则:
原码 = 反码反取
反码 = 补码-1
反推的到原码: 10000000 11111111 即:-127;
强制转换格式:(类型说明符)待转数据 例如(int) 3.6f 结果为3
运算符:
1.算数运算符:+ ,-, * , /, %, ++, --.
注意:
*号不可以省略
%只能用于整形数据之间,只能用于整数相除求余,运算结果的符号与被除数的符号相同.
比如:
9 % 7 = 2
3 % 2 = 1
3 % 5 = 3
3 % (-5) = 3 3 / (-5) = 0 ....3 0*(-5)+3 = 3
-3 % 9 = -3
-3 % (-5) = -3
printf("%u",a );
//4294967284;
源码:10000000 00000000 00000000 00001100
反码:11111111 11111111 11111111 11110011
补码:11111111 11111111 11111111 11110100
当我们用格式控制符输出a时,计算机
10000000 00000000 00000000 00000011
11111111 11111111 11111111 11111100
11111111 11111111 11111111 11111101\
4294967293
当不同类型的额数据参与运算时,低字节数据会自动转换为高字节数据的类型.
当给数据赋值的时候等号右边的数会自动向等号左边的数据类型转换.
float a = 1.3f b = 1.2f;
float c1 = (int )(a+b), c2= (int )a+b;
printf("%f,%f",c1,c2);
printf("%lf", (double)3/2);
printf("%lf",(double)(3/2));
强制转换得到所需类型的中间变量,原变量类型变量值不变,
精度缺失: 发生在多字节数类型强制转化为少字节数类型时.
short a = 256 ;
cahr b = a ;
printf("%c",b);
01100001
1001100001 609
1101100001 865
10101100001 1377
当少字节数转化为多字节数的时候,多出来的位需要补0或补符号位,取决于多字节数的
类型时有符号还是没符号,如果是无符号,统一补0,如果有符号就将低字节数的最高位当
做符号位去补.
如:
char a = 129;
short b = a ;
a 129: 10000001 char占一个字节
b 占两个字节
10000001 后面八位直接搬进来
因为b是有符号的类型,所以高八位需要补符号位,此时符号位是1
所以补全后的数据储存形式如下;
11111111 10000001
注意 计算机储存的是二进制补码.
所以读取数据时要还原成原码,,正数不用管,负数要遵循转换规则:
原码 = 反码反取
反码 = 补码-1
反推的到原码: 10000000 11111111 即:-127;
强制转换格式:(类型说明符)待转数据 例如(int) 3.6f 结果为3
运算符:
1.算数运算符:+ ,-, * , /, %, ++, --.
注意:
*号不可以省略
%只能用于整形数据之间,只能用于整数相除求余,运算结果的符号与被除数的符号相同.
比如:
9 % 7 = 2
3 % 2 = 1
3 % 5 = 3
3 % (-5) = 3 3 / (-5) = 0 ....3 0*(-5)+3 = 3
-3 % 9 = -3
-3 % (-5) = -3
-5 % 3 = -2
1,已知 short a = x; char b = a;
如果printf("%c",b),得到'E',
请问1000以内,x的值可以是多少?
2,-3%7; -7%2, 131%11; (-17)%(-12); -12%9; 9%-4;
-3 -1 10 -5 -3 1
3,将一个四位数abcd,变为dabc, 如:1234 转化成 4123;
4,定义一个整形的变量,值为你们的手机号码,假设这是你的寿命单位为秒,
假设一年 = 12月, 一月= 30天,
请将你的寿命转化成:X年X月X天X时X分X秒的格式输出.