1、以下代码循环几次?(面试题)
void test(){
int i; // 局部变量 i 的值是不确定的
for(;i<10;i++){
;
}
}
答案是---------不确定,在 c 语言中局部变量 i 没有初始化,值是不确定的,所以 i 的值可能是 0 ,也可能是其他任意数值,所以 for 循环的次数是不确定的!
2、定义变量的时候给变量赋值叫做初始化
int num = 10 ; //是初始化
int data ; //没有定义变量的时候给变量赋值,所以没有给变量初始化
data = 10 ; //不是初始化
一般变量都是初始化为 0 ,因为变量的值都是可以修改的,这样可以保证空间中是干净的!!!!!!
int num = 0 ;
3、变量的声明:先使用 后定义 必须事先对变量进行声明
4、字符类型 char
单引号只能作用于一个字符,转义字符除外!!!!!!!!!!!!!!!!
单引号的作用:
第一个作用:‘a’描述a为字符
第二个作用:取字符的ASCII值
printf %c 输出的是字符
printf %d 输出的是字符的ASCII值
//一般对字符变量初始化为下列结果,表明把字节全部清空
char ch = '\0'; //'\0'在计算中存储的本质是ASCII值 0
//便于修改,而不是下面的方式(当然也可以,但是上面的方式比较准确,便于修改内存空间的值)
char ch;
char ch = 'a';
'\0'没有对应的字符,只有ASCII值,所以上面的字符打印是空!
-----、面试问题:谈谈’0’和’\0’的区别?
‘0’是字符串 0,计算机中存储的ASCII值是 48
‘\0'没有对应的字符串,而且在计算机中的存储的ASCII值是 0
-----、使用getchar去掉回车符号
-----、解决方法,在scanf后面加入getchar去掉回车符号
5、有符号数和无符号数
-----、有符号数
数据二进制位的最高位是符号位,其他位是数据位
最高位为 1 ,表示的是 负 数
最高位为 0,表示的是 正数
以一字节为例:xddd dddd
1
111 1111 ~ 1
000 0000 ~ 0
000 0000 ~ 0
111 1111
-127 -0 ~ +0 ~127
将-0看成-128,所以是 -128 ~ 127,表示 256 个数
-----、无符号数
没有符号位,所有的二进制位都是数据位
0000 0000 ~ 1111 1111
0 ~ 255,表示 256 个数
-----、定义有符号数的方式
int num ; //方式一,默认方式(推荐),num是有符号数
signed int num; //方式二,使用关键字 signed 显示说明这是无符号数的定义
-----、输出有符号数的方式
%d int //输出有符号数int
%hd short //输出有符号数short
%ld long //输出有符号数lonng
-----、定义无符号数的方式
unsigned int num; //定义无符号数
-----、输出无符号数的方式
%u unsigned int //输出有符号数unsigned int
%hu unsigned short //输出有符号数unsigned short
%lu unsigned long //输出有符号数unsigned lonng
6、进制输出(八进制没有正负之分)
7、原码、反码、补码
计算机中存储的是数据的补码
原码:数据的二进制形式
123:原码 0111 1011
无符号数:
补码==反码==原码
123原码:0111 1011
123反码:0111 1011
123补码:0111 1011
有符号数:
正数:(0是符号位)
补码==反码==原码
+123原码:0111 1011
+123反码:0111 1011
+123补码:0111 1011
负数:(1是符号位)
反码 == 原码 的符号位不变,其余的按位取反
补码 == 反码 + 1 (符号位要是溢出不管,按照溢出取结果)
-123原码:1111 1011
-123反码:1000 0100
-123补码:1000 0101
-----、补码的意义(面试问题)
(1)、统一了0的编码
+0 的补码:0000 0000
-0 的补码:1000 0000(原码)-----》1111 1111(反码)-----》0000 0000(补码)
(2)、将减法变为加法运算,若是没有补码,直接计算10-6是-16,这是错误的,但是若是取-6的补码,则直接计算就是正确的!
8、计算机对数据的存储
负数
在计算机中以补码
的方式存储
非负数
在计算机中以原码
的方式存储
八进制
在计算机中以原码的方式存储
十六进制
在计算机中以原码的方式存储
综上所述:除过二进制负数
是在计算机中以补码的形式存储,其余的不论是无符号
还是有符号的正数
,或者是八进制还是十六进制或者是二进制的正数
使用十六进制
查看内存数据存储情况