开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第13天,点击查看活动详情
数的范围:
对于一个字节(8位),可以表达的是:00000000-11111111;
其中,00000000为0;11111111~ 10000000->-1~-128(将二进制数看作补码);
00000001~ 01111111->1~127
对于c来说:在计算机中是11111111最高位为1说明是一个负数,将被看作为补码为-1;
而对于i来说:在计算机中是00000000 00000000 00000000 11111111
整数范围:
char:1字节(8比特):-128~127
short:2字节:-32768~32767
int:取决于编译器(CPU),通常的意义是“一个字“(计算机字长):4字节下:
-2^(32-1)~2^(32-1)-1
long:取决于编译器(CPU),通常的意义是”一个字“
long long:8字节。
一般来说:-2^(n-1)~2^(n-1)-1
为了区别补码和正整数可以用:unsigned
如果一个字面常数想表达自己是unsigned,可以在后面加上u或U:255U;或者在定义变量时在前面加上unsigned,例:unsigned char c=255;那么输出后c值就会变为255。
用l或L表达long (long)
unsigned初衷并非扩展数能表达的范围,而是为了做纯二进制计算,主要是为了移位。
整数越界
例:对于char来说,-128-1=127、127+1=-128;对于unsigned char来说同理。
整数的输入输出
只有两种形式:int和long long,
%d:int、short、char;
%u:unsigned;
%ld:long、long long;
%lu:unsigned long long。
8进制和16进制:
一个以0开头的数字字面量就是八进制;
一个以0x开头的数字字面量就是十六进制。
如果想输出八进制和十六进制,八进制用%o,十六进制是%x,当十六进制数中出现字母,%x输出小写字母,%X输出大写字母。
八进制和十六进制只是如何把数字表达为字符串,与内部如何表达数字无关。
十六进制很适合表达二进制数据,因为4位二进制正好是一个十六进制位;
八进制的一位数字正好表达3位二进制,因为早期计算机的字长是12的倍数,而非8。