encode[*num/16] <<= (16-*num%16);
时间: 2023-06-20 21:06:01 浏览: 31
这段代码是将一个整数 `num` 转换为一个字节数组 `encode`。具体来说,它将 `num` 按照每 16 位划分成若干段,并将每一段转换为两个字节(即一个 16 位的无符号整数)。转换后的字节按照从高到低的顺序存储到 `encode` 数组中。
这段代码的具体实现方式是,首先定义了一个 `encode` 数组,它的长度至少是 `ceil(num.bit_length() / 16)`,也就是 `num` 二进制表示的位数除以 16,向上取整得到的结果。然后,代码将 `num` 的二进制表示从高位到低位逐个取出,每取出 16 位就将其转换为两个字节存储到 `encode` 数组中。具体来说,对于第 `i` 段(从高到低数第 `i` 段,从 0 开始计数),它的值为 `num >> (16*(num.bit_length()//16-i-1))) & 0xffff`,即将 `num` 右移 `16*(num.bit_length()//16-i-1)` 位(其中 `//` 表示整除),然后取低位的 16 位。这样得到的值就是第 `i` 段的值。然后将这个值存储到 `encode` 数组中的对应位置即可。
最后,对于不足 16 位的最后一段,由于转换后的字节数组中可能存在多余的 0 值,因此需要将这些 0 值移除。具体来说,代码计算出最后一段需要占用的字节数 `r`,然后将 `encode` 数组中的后 `r` 个元素复制到一个新数组 `result` 中。这样,`result` 中就存储了转换后的字节数组,长度为 `r`。
相关问题
<p class="shu_ck"> <em class="cc_sub" data-id="71842887">-</em> <input type="number" id="gnum" data-id="71842887" class="gnum c_pt" min="1" value="1"/> <em class="cc_add" data-id="71842887">+</em> </p><p class="shu_ck"> <em class="cc_sub" data-id="71842887">-</em> <input type="number" id="gnum" data-id="71842887" class="gnum c_pt" min="1" value="1"/> <em class="cc_add" data-id="71842887">+</em> </p帮我用上面列子做一个完整PHP的ajx点击回调事件,实现加减计算总和,加一个复选框选中显示的p标签盒子
好的,以下是示例代码:
HTML代码:
```html
<p class="shu_ck">
<em class="cc_sub" data-id="71842887">-</em>
<input type="number" id="gnum1" data-id="71842887" class="gnum c_pt" min="1" value="1"/>
<em class="cc_add" data-id="71842887">+</em>
</p>
<p class="shu_ck">
<em class="cc_sub" data-id="71842888">-</em>
<input type="number" id="gnum2" data-id="71842888" class="gnum c_pt" min="1" value="1"/>
<em class="cc_add" data-id="71842888">+</em>
</p>
<input type="checkbox" id="showTotal" onchange="showOrHideTotal()">
<p id="total" style="display:none;"></p>
```
JavaScript代码:
```javascript
function showOrHideTotal() {
const total = document.getElementById("total");
const checkbox = document.getElementById("showTotal");
if (checkbox.checked) {
total.style.display = "block";
} else {
total.style.display = "none";
}
}
function calculateTotal() {
const num1 = parseInt(document.getElementById("gnum1").value);
const num2 = parseInt(document.getElementById("gnum2").value);
const totalValue = num1 + num2;
const total = document.getElementById("total");
total.innerHTML = `总和:${totalValue}`;
}
document.querySelectorAll(".cc_add, .cc_sub").forEach(item => {
item.addEventListener("click", () => {
calculateTotal();
});
});
document.querySelectorAll(".gnum").forEach(item => {
item.addEventListener("change", () => {
calculateTotal();
});
});
```
PHP代码:
```php
<?php
if(isset($_POST["action"]) && !empty($_POST["action"])) {
$action = $_POST["action"];
switch($action) {
case "calculateTotal": calculateTotal(); break;
}
}
function calculateTotal() {
$num1 = intval($_POST["num1"]);
$num2 = intval($_POST["num2"]);
$totalValue = $num1 + $num2;
$result = array("total" => $totalValue);
echo json_encode($result);
}
?>
```
AJAX请求:
```javascript
function calculateTotal() {
const num1 = parseInt(document.getElementById("gnum1").value);
const num2 = parseInt(document.getElementById("gnum2").value);
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
const result = JSON.parse(xhr.responseText);
const total = document.getElementById("total");
total.innerHTML = `总和:${result.total}`;
}
}
xhr.open("POST", "your_php_script.php", true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send(`action=calculateTotal&num1=${num1}&num2=${num2}`);
}
```
注意,此代码仅供参考,需要根据实际情况进行修改和调试。
'''------------------------------------------------------ 【程序改错】请在FOUND注释行的下一行找出错误,并将正确写法填写到对应空格内 (本行代码全写,没有错误的地方保持不变)。 -------------------------------------------------------- 题目:统计不同字符的个数。下面程序是从键盘输入一个字符串, 统计其中空格、数字、中文、英文字符和其它字符的个数并输出。 ------------------------------------------------------ ''' stri = input("请输入您想要的字符串:") kong=0 alpha=0 chi=0 num=0 other=0 #*****FOUND***** for i in str: if i = = " ": kong +=1 #*****FOUND***** elif 0 <= i <= 9: num+=1 elif i>=u'\u4e00' and i<=u'\u9fa5': chi+=1 elif True == i.encode('utf-8').isalpha(): alpha+=1 #*****FOUND***** else other+=1 print("您输入的字符串中有{}个空格,{}个数字,{}个中文,{}个英文字符,{}\ 个其他字符".format(kong,num,chi,alpha,other))
'''------------------------------------------------------ 【程序改错】请在FOUND注释行的下一行找出错误,并将正确写法填写到对应空格内 (本行代码全写,没有错误的地方保持不变)。 -------------------------------------------------------- 题目:统计不同字符的个数。下面程序是从键盘输入一个字符串, 统计其中空格、数字、中文、英文字符和其它字符的个数并输出。 ------------------------------------------------------ ''' stri = input("请输入您想要的字符串:") kong=0 alpha=0 chi=0 num=0 other=0 #*****FOUND***** for i in stri: if i == " ": kong +=1 elif '0' <= i <= '9': num+=1 elif u'\u4e00' <= i <= u'\u9fa5': chi+=1 elif i.encode('utf-8').isalpha(): alpha+=1 else: other+=1 print("您输入的字符串中有{}个空格,{}个数字,{}个中文,{}个英文字符,{}个其他字符".format(kong,num,chi,alpha,other))
修改后的代码中,将str 改为 stri;将 if i = = " " 改为 if i == " ";将 elif 0 <= i <= 9 改为 elif '0' <= i <= '9';将 elif i>=u'\u4e00' and i<=u'\u9fa5' 改为 elif u'\u4e00' <= i <= u'\u9fa5';将 elif True == i.encode('utf-8').isalpha() 改为 elif i.encode('utf-8').isalpha();在 else 后面添加了冒号。这些修改使得代码可以正确地统计不同字符的个数,并输出结果。