C语言 signed 与 unsigned:
C语言中,当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型
signed int a = -110; unsigned int b = 2; cout << a + b << endl;
浮点数来说,浮点数(float,double)实际上都是有符号数,unsigned 和signed前缀不能加在float和double之上,当然就不存在有符号数根无符号数之间转化的问题了。
有符号和无符号整数的主要区别是如何看待最高位:
对于单字节二进制数01010110,无符号整数为86,有符号数也为86,因为最高位为0,所以二者间没有区别。
对于二进制数10101100来说,无符号数为172,有符号数则为-84。二者区别很大。
unsigned char a = -1; cout << (unsigned)a;
上面输出255,应该是这样的:-1有符号,应该是11111111,然后把这个赋值给a,输出unsigned a时解释为255
数组初始化:
看代码与结果:
1 #include <iostream> 2 3 using std::cout; 4 using std::endl; 5 using std::cin; 6 7 int a[10]; 8 9 void show(int arr[], int len) 10 { 11 for (int i = 0; i < len; ++i) 12 cout << arr[i] << " "; 13 cout << endl; 14 } 15 16 int main(void) 17 { 18 int b[10]; 19 int c[10] = { 1, 2 }; 20 show(a, 10); 21 show(b, 10); 22 show(c, 10); 23 cin.get(); 24 }
其实这种东西要看编译器与具体系统环境,因为C标准从没定义“未初始化的int类型的默认值”。一般全局变量会初始化为0,b数组在在栈里面,都是脏数据,c数组初始化了前几个,那么后几个也被初始化了。所以初始化的工作程序员还是不要逃避吧。