首先,看这个代码前,要对了解“补码”的含义
简单贴一点随堂笔记:
整数的范围
数的范围
对于一个字节(8位),可以表达的是:
00000000 - 11111111
其中
00000000 ——> 0
1111 1111 ~ 1000 0000 ——> -1~ -128
0000 0001 ~ 0111 1111 ——> 1~127
1000 0000 . 0000 0000 .
unsigned
如果一个字面量常数想要表达自己是unsigned,可以在后面加u或者U
255U
用l或L 表示long(long)
unsigned 的初衷并非扩展数能表达的范围,而是为了作纯二进制运算,
//扩展正整数的表达范围
主要是为了移位
这张图片很好的 表示了 一个int的表示范围
其中逆时针代表加,顺时针表示减。
由此可以解释下面的代码。
具体代码如下:
#include<stdio.h>
//判断一个变量所能表达的最大数与位数
/*
判断一个变量所能表达的最大数与位数
由那个圆可知,整数范围内的最大值在12点钟
即可以:
1·通过一个循环,使一个变量作自增运算
2·循环继续条件为 该变量>0,
3·所以循环跳出时,变量值停止位置就是最大正数“翻过去”的一个负数
4·此时作–&