如何解决一行中读取数字的第一位
我有一个数字,我只想读取数字的第一位。我像下面这样
<?php
if(isset($_POST['sendmail'])) {
require 'PHPMailerAutoload.php';
require 'credential.php';
$mail = new PHPMailer;
$mail->SMTPDebug = 4; // Enable verbose debug output
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = EMAIL; // SMTP username
$mail->Password = PASS; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable TLS encryption,`ssl` also accepted
$mail->Port = 587; // TCP port to connect to
$mail->setFrom(EMAIL,'litdeveloper');
$mail->addAddress($_POST['email']); // Add a recipient
$mail->addReplyTo(EMAIL);
// print_r($_FILES['file']); exit;
for ($i=0; $i < count($_FILES['file']['tmp_name']) ; $i++) {
$mail->addAttachment($_FILES['file']['tmp_name'][$i],$_FILES['file']['name'][$i]); // Optional name
}
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = $_POST['subject'];
$mail->Body = '<div style="border:2px solid red;">This is the HTML message body <b>in bold!</b></div>'.$_POST['message'];
$mail->AltBody = $_POST['message'];
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}
}
?>
以上技术有效,但是否可以在一个衬里中完成?
解决方法
获取最低有效位的最简单方法是检查数字是否为偶数(仅适用于非负数字):
int LSB = number % 2;
如果您想使用按位运算符更详细:
int MSB = number & 1;
或者(也许过于冗长,但传达的意思是“我想要在位置0定位”):
int MSB = number & (1 << 0);
要获得最高有效位,您首先需要了解给定类型表示形式中的位数是多少:
int digits = std::numeric_limits<unsigned int>::digits();
int MSB = number & (1 << (digits - 1))
请注意,对于带符号类型,这将提供最高有效数字位(忽略符号位)。
,如果是奇数,则为1
;如果是偶数,则为0
。
因此您可以执行以下操作:
unsigned int the_bit = number % 2;
如果您正在考虑也有负int
的可能性,则:
unsigned int the_bit = std::llabs(number % 2);
llabs
,因为在某些机器中,long
是32
位,而long long
必须至少是64
位。
这对于2的补码有效。
当然也可以按位AND
。
unsigned int the_bit = number & 1;
简单有效,1 AND 1
是1
,0 AND 1
是0
。
我没有仔细检查您的代码是否正确。但是,将其写在一行中只是替换等效表达式的一种练习:
unsigned int number = 12346; // Some number
int bit_number_to_read = 1;
int mask = 1 << bit_number_to_read;
int masked_n = number & mask;
unsigned int the_bit = masked_n >> bit_number_to_read;
std::cout << "The first bit of number contains: " << the_bit << std::endl;
std::cout << (masked_n >> bit_number_to_read) << "\n";
std::cout << ( (number&mask) >> bit_number_to_read) << "\n";
std::cout << ( (number&(1 << bit_number_to_read)) >> bit_number_to_read) << "\n";
所有cout
将打印相同的结果。正如您在评论中已经提到的那样,您还可以通过0x1 & number
获得第一位。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。