转型被用来将一个数值从一种类型转换到另一种类型。下面的程序连续使用了三个转型。那么它到底会打印出什么呢?
public class Multicast{
public static void main (String[] args){
System.out.println((int)(char)(byte) -1);
}
}
无论你怎样分析这个程序,都会感到很迷惑。它以int数值-1开始,然后从int转型为byte,之后转型为char,最后转型回int。第一个转型将数值从32位窄化到了8位,第二个转型将数值从8位拓宽到了16位,最后一个转型又将数值从16位拓宽回了32位。这个数值最终是回到了起点吗?如果你运行该程序,你就会发现不是。它打印出来的是65535,但是这是为什么呢?
该程序的行为紧密依赖于转型的符号扩展行为。Java使用了基于2的补码的二进制运算,因此int类型的数值-1的所有32位都是置位的。从int到byte的转型是很简单的,它执行了一个窄化原始类型转化(narrowing primitive conversion),直接将除低8位之外的所有位全部砍掉。这样做留下的是一个8位都被置位了的byte,它仍旧表示-1。
从byte到char的转型稍微麻烦一点,因为byte是一个有符号类型,而char是一个无符号类型。在将一个整数类型转换成另一个宽度更宽的整数类型时,通常是可以保持 ......
下面的程序使用了复合的异或赋值操作符,它所展示的技术是一种编程习俗。那么它会打印出什么呢?
public class CleverSwap{
public static void main(String[] args){
int x = 1984; // (0x7c0)
int y = 2001; // (0x7d1)
x^= y^= x^= y;
System.out.println("x= " + x + "; y= " + y);
}
}
就像其名称所暗示的,这个程序应该交换变量x和y的值。如果你运行它,就会发现很悲惨,它失败了,打印的是
x = 0; y = 1984。
交换两个变量的最显而易见的方式是使用一个临时变量:
int tmp = x;
x = y;
y = tmp;
很久以前,当中央处理器只有少数寄存器时,人们发现可以通过利用异或操作符(^)的属性(x ^ y ^ x) == y来避免使用临时变量:
x = x ^ y;
y = y ^ x;
x = y ^ x;
这个惯用法曾经在C编程语言中被使用过,并进一步被构建到了C++中,但是它并不保证在二者中都可以正确运行。但是有一点是肯定的,那就是它在Java中肯定是不能正确运行的。
Java语言规范描述到:操作符的操作数是从左向右求值的。为了求表达式 x ^= expr的值,x的值是在计算expr之前被提取的,并且这两个值的异或结果被赋给变量x。在CleverSwap程序中,变量x的值被提取了两次& ......
MySql版本信息的查询:
1、通过mysql -V命令查询
C:\mysql\bin>mysql -V
mysql Ver 12.22 Distrib 4.0.18, for Win95/Win98 (i32)
2、通过mysql模式下的status命令查看状态
mysql> status
--------------
mysql Ver 12.22 Distrib 4.0.18, for Win95/Win98 (i32)
Connection id: 14933
Current database: mysql
Current user: root@localhost
SSL: Not in use
Server version: 4.0.18-nt
Protocol version: 10
Connection: localhost via TCP/IP
Client characterset: latin1
Server characterset: latin1
TCP port: ......
环境:
操作系统:WIN2003
MySql:mysql Ver 12.22 Distrib 4.0.18, for Win95/Win98 (i32)
思想:
为了安全加密需要设置mysql数据库相关用户的密码;
MySql数据库的密码都是保存在mysql数据库实例的user表中的password字段里,通过PASSWORD("")的函数对密码加密后保存在表中;
所以要修改用户的密码只需要改变相应的字段内容就可以了。
注意:
我这里发现admin用户在user表中的User字段为空,而不是向其他用户那样直接显示出来的。
步骤:
mysql 的root口令已更新为 root,admin密码更改为admin
1、编辑 c:\window\my.ini
在my.ini配置段添加如下一行:
skip-grant-tables
保存退出编辑。
2、然后重启MySQL服务
windows环境中:
net stop MySQL
net start MySQL
3、设置新的root密码
cd c:\mysql\bin
mysql -u root -p
use mysql
update user set password=PASSWORD("mysql") where user='root';
update user set password=PASSWORD("root") where user='';
(注:mysql的user表中user=''即为admin 用户)
flush privileges ;
quit&n ......
比如:
insert into User values(x1,x2,x3,x4),(x1,x2,x3,x4),(x1,x2,x3,x4)
这种写法,列数量必须和表中所有列保持一致,也就是说列都要列出来。
这个user表里面的一个字段x1是个自增长字段,则应该填null占位
insert into User values(null,x2,x3,x4),(null,x2,x3,x4),(null,x2,x3,x4)
否则会报错。 ......
PHP 5.3.1
MySQL 5.0.89
Nginx 0.8.33 或 0.7.65 (可选)
现在,我们可以快速全自动搞定 CentOS + Nginx + PHP-FPM + MySQL 的安装了
这个可比网上流传的什么一键安装包要好得多,强烈推荐此法安装,适合所有菜鸟和高手
我服务器上全用的源代码编译安装,也好不到哪去,还很费劲
我这个装完已经包含 php 的一些常用扩展, PDO,eaccelerator,memcache,tidy等等
本文为 21andy.com原创,转载请以超级链接方式注明出处 http://www.21andy.com
先新建一个 repo
# vi /etc/yum.repos.d/centos.21andy.com.repo
放入如下内容
[21Andy.com]
name=21Andy.com Packages for Enterprise Linux 5 - $basearch
baseurl=http://www.21andy.com/centos/5/$basearch/
enabled=1
gpgcheck=0
protect=1
启用 EPEL repo
i386
rpm -ihv http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
x86_64
rpm -ihv http://download.fedora.redhat.com/pub/epel/ ......