1.4变量和数据类型进阶

1.4变量和数据类型进阶

有符号整数和无符号整数

  • 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 。

| 整数 | 表示成short时的二进制形式 | 十六进制形式 | | 0 | 0000 0000 0000 0000 | 0000 | | 1 | 0000 0000 0000 0001 | 0001 | | 257 | 0000 0001 0000 0001 | 0101 | | 32767 | 0111 1111 1111 1111 | 7FFF | | -32768 | 1000 0000 0000 0000 | 8000 | | -1 | 1111 1111 1111 1111 | FFFF | | -2 | 1111 1111 1111 1110 | FFFE | | -257 | 1111 1110 1111 1111 | FEFF |ios

数据类型的自动转换

  • 有些不一样的数据类型之间是相容的,能够互相赋值,这叫数据类型的自动转换
int a = 11.34; // 11.34被自动截取小数部分,转换为11后赋值给a
int b = 30;
double d = b; // d的值是30.0

字符类型到整型的互相转换

  • 字符型数据能够转换成整型数据
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()
{
I	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;
	printf("c=%c, n1=%d\n", c, n1); //输出:c=b, n1=1378
	n1 = d1;  //d1=7.808,去掉小数部分后赋值给n1,n1变为7
	printf("n1=%d\n", n1); // 输出 n1=7
	d2 = n1;  // d2变为7
	printf("d2=%f\n", d2); //输出 d2=7.000000
	return 0;
}
/* Output:
c=a, n2=98
c=b, n1=1378
n1=7
d2=7.000000
*/
相关文章
相关标签/搜索