1. package org.jr.util;
  2. /**
  3. * Copyright: Copyright (c) 2002-2004
  4. * Company: JavaResearch(http://www.javaresearch.org)
  5. * 最后更新日期:2003年3月11日
  6. * @author Cherami
  7. */
  8. /**
  9. * boolean类型相关内容的操作工具类,提供常见的boolean类型操作需要的方法。
  10. * @since 0.5
  11. */
  12. public class BooleanUtil {
  13. /**
  14. * 私有构造方法,防止类的实例化,因为工具类不需要实例化。
  15. */
  16. private BooleanUtil() {
  17. }
  18. /**
  19. * 将整型的数转换为boolean数组,如果对应的位的值为1则将数组中的对应的元素赋值为true,否则为false。
  20. * 例如value为5,则得到一个长度为32,只有0和2两个元素的值为true的数组。
  21. * @param value 值
  22. * @return 转换后的boolean数组
  23. * @since 0.5
  24. */
  25. public static boolean[] convertToArray(int value) {
  26. int length = 32;
  27. boolean[] result = new boolean[length];
  28. int mark = 1;
  29. for (int i = 0; i < length; i++) {
  30. if ( (mark & value) != 0) {
  31. result[i] = true;
  32. }
  33. else {
  34. result[i] = false;
  35. }
  36. mark = mark << 1;
  37. }
  38. return result;
  39. }
  40. /**
  41. * 将字节型的数转换为boolean数组,如果对应的位的值为1则将数组中的对应的元素赋值为true,否则为false。
  42. * 例如value为5,则得到一个长度为8,只有0和2两个元素的值为true的数组。
  43. * @param value 值
  44. * @return 转换后的boolean数组
  45. * @since 0.5
  46. */
  47. public static boolean[] convertToArray(byte value) {
  48. int length = 8;
  49. boolean[] result = new boolean[length];
  50. int mark = 1;
  51. for (int i = 0; i < length; i++) {
  52. if ( (mark & value) != 0) {
  53. result[i] = true;
  54. }
  55. else {
  56. result[i] = false;
  57. }
  58. mark = mark << 1;
  59. }
  60. return result;
  61. }
  62. /**
  63. * 将长整型的数转换为boolean数组,如果对应的位的值为1则将数组中的对应的元素赋值为true,否则为false。
  64. * 例如value为5,则得到一个长度为64,只有0和2两个元素的值为true的数组。
  65. * @param value 值
  66. * @return 转换后的boolean数组
  67. * @since 0.5
  68. */
  69. public static boolean[] convertToArray(long value) {
  70. int length = 64;
  71. boolean[] result = new boolean[length];
  72. long mark = 1;
  73. for (int i = 0; i < length; i++) {
  74. if ( (mark & value) != 0) {
  75. result[i] = true;
  76. }
  77. else {
  78. result[i] = false;
  79. }
  80. mark = mark << 1;
  81. }
  82. return result;
  83. }
  84. /**
  85. * 将短节型的数转换为boolean数组,如果对应的位的值为1则将数组中的对应的元素赋值为true,否则为false。
  86. * 例如value为5,则得到一个长度为16,只有0和2两个元素的值为true的数组。
  87. * @param value 值
  88. * @return 转换后的boolean数组
  89. * @since 0.5
  90. */
  91. public static boolean[] convertToArray(short value) {
  92. int length = 16;
  93. boolean[] result = new boolean[length];
  94. long mark = 1;
  95. for (int i = 0; i < length; i++) {
  96. if ( (mark & value) != 0) {
  97. result[i] = true;
  98. }
  99. else {
  100. result[i] = false;
  101. }
  102. mark = mark << 1;
  103. }
  104. return result;
  105. }
  106. /**
  107. * 将boolean数组转换为一个整型值,数组的长度如果大于32,多余的部分被忽略。
  108. * 例如一个长度为8的数组,只有0和3两个元素的值为true,将返回值9。
  109. * @param values boolean数组
  110. * @return 转换后的整型值
  111. * @since 0.5
  112. */
  113. public static int convertToInt(boolean[] values) {
  114. int length = 8;
  115. int value = 0;
  116. int mark = 1;
  117. for (int i = 0; i < length; i++) {
  118. if (values[i] == true) {
  119. value = value + mark;
  120. }
  121. mark = mark << 1;
  122. }
  123. return value;
  124. }
  125. /**
  126. * 将boolean数组转换为一个字节型值,数组的长度如果大于8,多余的部分被忽略。
  127. * 例如一个长度为8的数组,只有0和3两个元素的值为true,将返回值9。
  128. * @param values boolean数组
  129. * @return 转换后的字节型值
  130. * @since 0.5
  131. */
  132. public static byte convertToByte(boolean[] values) {
  133. int length = 8;
  134. byte value = 0;
  135. byte mark = 1;
  136. for (int i = 0; i < length; i++) {
  137. if (values[i] == true) {
  138. value = (byte) (value + mark);
  139. }
  140. mark = (byte) (mark << 1);
  141. }
  142. return value;
  143. }
  144. /**
  145. * 将boolean数组转换为一个短整型值,数组的长度如果大于16,多余的部分被忽略。
  146. * 例如一个长度为8的数组,只有0和3两个元素的值为true,将返回值9。
  147. * @param values boolean数组
  148. * @return 转换后的短整型值
  149. * @since 0.5
  150. */
  151. public static short convertToShort(boolean[] values) {
  152. int length = 16;
  153. short value = 0;
  154. short mark = 1;
  155. for (int i = 0; i < length; i++) {
  156. if (values[i] == true) {
  157. value = (short) (value + mark);
  158. }
  159. mark = (short) (mark << 1);
  160. }
  161. return value;
  162. }
  163. /**
  164. * 将boolean数组转换为一个长整型值,数组的长度如果大于64,多余的部分被忽略。
  165. * 例如一个长度为8的数组,只有0和3两个元素的值为true,将返回值9。
  166. * @param values boolean数组
  167. * @return 转换后的长整型值
  168. * @since 0.5
  169. */
  170. public static long convertToLong(boolean[] values) {
  171. int length = 64;
  172. long value = 0;
  173. long mark = 1;
  174. for (int i = 0; i < length; i++) {
  175. if (values[i] == true) {
  176. value = value + mark;
  177. }
  178. mark = mark << 1;
  179. }
  180. return value;
  181. }
  182. }