1.有符号数和无符号数所能表示的范围大小
以8位为例:
有符号:-128~127
无符号:0~255
无符号则8位全是数值位:0000 0000~1111 1111->0~255
有符号位的最高位是符号位:(0为正数,1为负数)
0000 0000~0111 1111->0~127
1000 0000~1111 1111->-128~-1
故有符号位的8位范围是-128~127
2.整数-4 ==>int = -4;(32位)在计算机中的存储步骤:
(注:0-0表示8位都为0,1-1同理)
step1:取-4的绝对值,并求其绝对值的原码。
|-4|=4 ——》0-0 0-0 0-0 0000 0100
step2:取反
0-0 0-0 0-0 0000 0100 ——》1-1 1-1 1-1 1111 1011
step3:加1
1-1 1-1 1-1 1111 1011 ——》1-1 1-1 1-1 1111 1100(-4在计算机中的存储形式)
3.%d与%u
%d:十进制有符号的输出,最高位为1(负数),需要进行逆运算。( 对二进制码依次进行减一,取反,加负号的操作。)
%u:十进制无符号输出。
eq:
int a=-5;
printf("%d\n",a);//-5
printf("%u\n",a);//2^32-5
4.移位操作
原数左移n位 <==> 原数乘以2^n
原数右移n位 <==> 原数除以2^n
无符号数:
左移:移出去的丢掉,低位补0;
右移:移出去的丢掉,高位补0;
有符号数:
左移:移出去的丢掉,低位补0;
右移:移出去的丢掉,高位补符号位;
5.字节长度不一样,如何赋值
(1)长字节——》短字节
低字节直接拷贝,高字节直接丢弃。
(2)短字节——》长字节
低字节直接拷贝,
如果短的是有符号数,高位就全补符号位。
如果短的是无符号数,高位就补0。
6.在计算机中,如何存一个字符
保存的是这个字符的ASCII值,而不是它的形状。
7.在进行10的次方运算时要注意:
字母e/E的前面必须有数字;后面必须为整数(正整数,负整数)
8.i++和++i的区别
表达式i++的值为i,而完成表达式之后的值为i+1;
表达式++i的值为i+1,完成表达式之后的值任然是i+1。
9.运算符的惰性运算(&& ||)
(1)当&&左边的值为0时,不会计算&&右边的值。
(2)当||左边的值为1时,不会计算||右边的值。
eq:
main()
{
int i=1,j=1,k=2;
if((j++ || k++) && i++)
printf("%d %d %d\n",i,j,k);
}
输出结果为:2 2 2
10.默认类型
c语言中,数字3默认为int类型;数字3.0默认为double类型。