变量和数据类型进阶
有符号整数和无符号整数
short、int、long、long long 类型的变量,可以表示正数,也可以表示负数,称为有符号的整数类型。
unsigned short, unsigned int, unsigned long,unsigned long long类型的变量,只会被看作非负数,称为无符号的整数类型
有符号整数的表示方式
将最左边的位(最高位)看作“符号位”。符号位为0,则表示是非负数,其绝对值就是除符号位以外的部分;符号位为1,则表示是负数,其绝对值是所有位取反(0变1,1变0)后再加1。
将一个负整数表示为二进制的方法:
(1) 设置符号位为1
(2) 其余位等于绝对值取反再加1
有符号整数的表示方式
给定一个负整数的二进制表示形式,求该负整数:
该负整数的绝对值是其二进制表示形式取反再加1(取反加1后的结果要看作是正数)。
将一个负整数表示为二进制的方法:
1) 设置符号位为1
2) 其余位等于该负数的绝对值的二进制表示形式取反再加1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qg9IxoZv-1681722951075)(2023-04-17-17-14-27.png)]
字符类型到整型的互相转换
字符型数据可以转换成整型数据
int k = 'a' ; //k内容变为'a'的ASCII码,即97
printf("%d",k) ; //输出:97
整型数据也可以转换为字符型数据,但只会留下最右边的一个字节(第0位
到第7位),其他字节丢弃
int n = 98;
char k = n ; //k内容变98,98是字符'b'的ASCII码
printf("%c",k) ; //输出:b
类型自动转换示例
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
int n1 = 1378; //1378的十六进制形式是 0x562
short n2;
char c = 'a';
double d1 = 7.809;
double d2;
n2 = c+1; //n2变为98 , 97是'a'的ASCII码
printf("c=%c,n2=%d\n",c,n2); //输出 c=a,n2=98
c = n1; // n1是0x562, 0x62被当做ASCII码赋值给c,c变为 'b'
printf("c=%c,n1=%d\n",c,n1); //输出 c=b,n1=1378
n1 = d1; // d1=7.809, 去掉小数部分后赋值给n1,n1变为7
printf("n1=%d\n", n1); //输出 n1=7
d2 = n1; //d2变为7
printf("d2=%f\n",d2); //输出 d2=7.000000
return 0;
用sizeof运算符求变量占用字节数
sizeof(变量名)
sizeof(类型名)
能够得到某个变量或某一类型变量占用的字节数
int n1 = 10;
double f;
char c;
printf("%d,%d,%d,%d",sizeof(n1),sizeof(short),
sizeof(double),sizeof(c));
输出: 4,2,8,1