按位取反
10 00 01 10
取反后为
01 11 10 01
-----------------华丽丽的补充答案分割线----------
看来得详细给你分析一下数字的机内表示和机内存储方式。
你最好把你那个a的具体值是多少、类型是什么说一下。
对于最常见的32位有符号整型数,机内长度应该为4个Byte32位,且最高位表示符号为,0为正,1为负,因此1230应该表示为:
0000 0000 0000 0000 0000 0100 1100 1110
方便起见一半用十六进制表示
0x00 00 04 CE
按位取反后成为:
1111 1111 1111 1111 1111 1011 0011 0001 : 0xFFFFFB31
并不是-1230,而是-2147482417
如果是uint_8,即无符号8位整型:
00 00 10 00 (8)
按位取反后成为:
11 11 01 11( 247 而不是-8)
总之这个操作要根据对象具体分析。如果是浮点数更复杂。
位逻辑非运算
位逻辑非运算是单目的,只有一个运算对象。位逻辑非运算按位对运算对象的值进行非运算,即:如果某一位等于0,就将其转变为1;如果某一位等于1,就将其转变为0。
比如,对二进制的10010001进行位逻辑非运算,结果等于01101110,用十进制表示就是:
~145等于110;对二进制的01010101进行位逻辑非运算,结果等于10101010。用十进制表示就是~85等于176。
server.mappath(~);
这句话的意思就是回到该项目的根目录
a=6应该是 a=0000 0110
取反应该是 ~a=1111 1001
那也应该不是-7啊
析构函数(destructor) 与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。
析构函数名也应与类名相同,只是在函数名前面加一个波浪符~,例如~stud( ),以区别于构造函数。它不能带任何参数,也没有返回值(包括void类型)。只能有一个析构函数,不能重载。如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数,它也不进行任何操作。所以许多简单的类中没有用显式的析构函数。